0

我有这个功能:

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

            var $this = this;           

            KeyCheck($this, e);
            return false;

});

基本上,我将 keydown 事件附加到表中的单元格(使用箭头键进行导航) .divBody 是表的类名。它按预期工作。

1)这是将处理程序附加到单元格的正确方法吗?

2)我对何时应该使用 .on 方法感到困惑。我是否应该避免上述情况并改用以下内容:

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

            var $this = this;           

            KeyCheck($this, e);
            return false;

        });

提前致谢!

4

2 回答 2

1

在您的第二个示例中,您正在使用事件委托。的任何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,它仍然会触发。如果您像第一个示例一样将它添加到对象中,它只会绑定到现有元素,因此如果您添加新元素,它不会为它们触发。

因此,使用哪一个的问题归结为您是否将添加新td的 stable以及是否需要为它们处理 keydown 。如果不是,则不需要能够添加新td的,使用第一个选项整体性能会稍好一些。

于 2013-10-14T22:43:10.753 回答