0

私はこの機能を持っています:

$(".divbody tbody tr td").keydown(function (e) {                

            var $this = this;           

            KeyCheck($this, e);
            return false;

});

基本的に、キーダウン イベントをテーブルのセルにアタッチしています (ナビゲーションに矢印キーを使用するため)。divBody はテーブルのクラス名です。期待どおりに動作しています。

1) これは、セルにハンドラーをアタッチする正しい方法ですか?

2) .on メソッドをいつ使用すべきか混乱しています。上記を避けて、代わりに以下を使用する必要があります。

$( ".divbody" ).on( "keydown", "tbody tr td", function(e) {  

            var $this = this;           

            KeyCheck($this, e);
            return false;

        });

前もって感謝します!

4

2 に答える 2

1

2 番目の例では、イベント委任を使用しています。tdの子要素はハンドラー.divbodyを呼び出します。

liveつまり、まだ作成されていない将来の子要素でも、処理されたイベントが発生します。

http://api.jquery.com/on/を参照

例えば、

$(".mytable td").click(function(e) { alert('cell clicked'); });

すでに存在する要素のハンドラーとしてのみ設定されます。

$(".mytable").on('click','td', function(e) {alert('cell clicked'); });

まだ dom に追加されていない td 要素に対して発火します

ただし、すべての要素が既に dom にある場合は、最初の例に固執できます。

于 2013-10-14T22:42:49.713 に答える
1

jQuery の.onイベントは、要素を に追加した場合でも起動するようにリスナーをバインドしますdocument。最初の例のようにオブジェクトに追加すると、既存の要素にのみバインドされるため、新しい要素を追加しても、それらに対しては起動しません。

したがって、どちらを使用するかという問題は、 に新しい を追加するかどうかtdtableおよびそれらのキーダウンを処理する必要があるかどうかに帰着します。そうでない場合は、新しい を追加できるようにする必要はありませんtd。最初のオプションを使用すると、全体的にわずかにパフォーマンスが向上します。

于 2013-10-14T22:43:10.753 に答える