jquery何时使用.on方法

时间:2013-10-14 22:36:27

标签: jquery

我有这个功能:

$(".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;

        });

提前感谢!

2 个答案:

答案 0 :(得分: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中,你可以坚持你的第一个例子。

答案 1 :(得分:1)

jQuery的.on事件以这样的方式绑定侦听器:如果向document添加元素,它仍将触发。如果将它添加到对象(如第一个示例),它将只绑定到现有元素,这样如果添加新元素,它将不会为它们触发。

因此,使用哪一个问题归结为您是否要向td添加新的table以及是否需要为它们处理keydown。如果不是,则无需添加新的td,使用第一个选项的整体效果会略好一些。