0

入力フィールドの大きなマトリックスとして実装された、大きなHTMLデータ入力テーブルがあります。行方向と列方向のタブ順序を動的に切り替えるJavaScriptベースの機能を実装しようとしています。

私が使用しているアプローチは、IE8では「1回」しか機能しないようです。つまり、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);
});

なぜこれが期待どおりに機能しないのか、何か考えはありますか?

4

1 に答える 1

1

これを別の方法で行うことをお勧めします。つまり、すべてのエントリアイテムにタブキーのイベントハンドラーを配置し、そのキーのイベントを使用して、必要に応じて行または列の次のアイテムを検索します。次に、その入力でsetFocus()を呼び出します。必要に応じて、shift+tabに対して反対の操作を行うことができます。

これはあなたの問題を回避し、あなたの質問に実際には答えませんが、あなたが持っているこの.col-と.row-の命名スキームの必要性を排除することもでき、おそらくデザインを維持するのがより簡単になります。

于 2009-11-25T01:38:07.843 に答える