有很多事件的大桌子,使用事件冒泡更有效吗?

我有一个大的表/网格,每行,表头等都有事件。

不是我为每个单元格生成事件或绑定事件,最好是设置一个“全局”事件,然后我相信当点击或鼠标hover事件发生时,它会冒泡到整个表格上的“全局”事件然后我得到过滤事件调用者并作出反应。

我以前读过这个,但不确定我的想法是否正确。

这种方法有什么问题吗?

是的,你的想法是正确的,是的,它更好。 使用jQuery,它就像直接绑定事件一样简单 – 查找.delegate()方法。 你可以做的是在容器元素上放置一个事件处理程序,并告诉它如何基于普通的jQuery选择器将事件路由到处理程序以过滤实际的事件目标。

从而:

 $('#container').delegate('td.clickMe', 'click', function(e) { /* table cell click */ }); 

这通常是一种很好的方法。 正如Pointy建议的那样,实现过滤的最佳方法是使用本机jQuery $().delegate()函数。 这肯定会更有效率。

要记住的主要问题是并非所有事件都默认冒泡。 jQuery试图修复此问题,但据我所知,表单上的submit事件不会在Internet Explorer中冒泡。

另一个需要记住的是,如果调用event.stopPropagation() (或从绑定函数返回false event.stopPropagation() ,则不会调用绑定在树上方的函数。

你的想法是正确的。 你可以这样做:

 $("table#yourTable").click(function(evt){ if($(evt.target).is('td.someTd')) { //do whatever you want to do } }) 

因此,您只绑定一个单击事件并过滤单击的目标元素。