无法在 IE8 中多次设置 tabIndex

发布于 2024-08-12 11:42:42 字数 960 浏览 6 评论 0原文

我有一个大型 HTML 数据输入表,以大型输入字段矩阵的形式实现。我正在尝试实现一个基于 JavaScript 的功能,该功能可以在按行和按列的 Tab 键顺序之间动态切换。

我使用的方法似乎只在 IE8 中有效“一次”。也就是说,一旦使用 JavaScript 设置了选项卡索引,任何后续更改都将被忽略 - 并且选项卡顺序将恢复为其默认状态。

表输入的类名如下:

.row-0 .col-0 | .row-0 .col-1 | .row-0 .col-2 | ...
--------------+---------------+---------------+----
.row-1 .col-0 | .row-1 .col-1 | .row-1 .col-2 | ...

我的 JavaScript 看起来像这样:

nCols = ...;
nRows = ...;

function setTabOrder(byCol) {
    var max = byCol ? nCols : nRows;
    var selector = byCol ? '.col-' : '.row-';
    var tabIndex = 1;
    for (var i = 0; i < max; i++) {
        $(selector + i).each(function () {
            this.tabIndex = tabIndex++;
            //this.value = this.tabIndex;
        });
    }
}

实际上,如果在页面加载时调用 setTabOrder(true); ,我似乎只能按列进行制表,即:

$(function () {
    setTabOrder(true);
});

任何想法为什么会这样没有像我预期的那样工作?

I've got a large HTML data entry table, implemented as a large matrix of input fields. I'm trying to implement a JavaScript-based feature that dynamically switches between a row-wise and column-wise tab order.

The approach I'm using seems to only work "once" in IE8. That is, once the tab index has been set using JavaScript, any subsequent changes are ignored - and the tab ordering reverts to its default state.

The table inputs have classnames like so:

.row-0 .col-0 | .row-0 .col-1 | .row-0 .col-2 | ...
--------------+---------------+---------------+----
.row-1 .col-0 | .row-1 .col-1 | .row-1 .col-2 | ...

My JavaScript looks like this:

nCols = ...;
nRows = ...;

function setTabOrder(byCol) {
    var max = byCol ? nCols : nRows;
    var selector = byCol ? '.col-' : '.row-';
    var tabIndex = 1;
    for (var i = 0; i < max; i++) {
        $(selector + i).each(function () {
            this.tabIndex = tabIndex++;
            //this.value = this.tabIndex;
        });
    }
}

Actually, it seems I can only tab by column if I invoke setTabOrder(true); when the page loads, i.e.:

$(function () {
    setTabOrder(true);
});

Any ideas why this isn't working as I expect it to?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绝情姑娘 2024-08-19 11:42:43

我建议您以不同的方式执行此操作,即在所有条目项上放置选项卡键的事件处理程序,然后使用该键的事件来查找行或列中的下一个项目,具体取决于您想要的内容,以及然后对该输入调用 setFocus() 。如果需要,您可以对 Shift+Tab 执行相反的操作。

这可以避免您的问题,并且不能真正回答您的问题,但它也可以消除对您所拥有的 .col- 和 .row- 命名方案的需要,这可能会导致更易于维护的设计。

I would recommend you do this a different way, which is the put an event handler for tab keys on all the entry items and then use that key's event to look for the next item in the row or column, depending on what you want, and then call setFocus() on that input. You can do the opposite for shift+tab if you want.

This avoids your problem and doesn't really answer your question, but it also could eliminate the need for this .col- and .row- naming scheme you have which will probably result in an easier to maintain design.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文