我有这个功能:
$(".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;
});
提前感谢!
答案 0 :(得分:1)
在您的第二个示例中,您使用了事件委派。 td
的任何.divbody
元素子句都会调用您的处理程序。
它与live
的工作方式类似,这意味着尚未创建的未来子元素仍将触发处理事件。
例如,
$(".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
,使用第一个选项的整体效果会略好一些。