Javascript 包含大量事件的大型表,使用事件冒泡是否更有效?

Javascript 包含大量事件的大型表,使用事件冒泡是否更有效?,javascript,jquery,Javascript,Jquery,我有一个很大的表/网格,每行上都有事件、表头等 与其生成事件或将事件绑定到每个单元格,不如放置一个“全局”事件,然后我相信当单击或鼠标悬停事件发生时,它会在整个表上冒泡到我的“全局”事件,然后我会筛选事件调用方并作出反应 我以前读过,但不确定我的想法是否正确 这种方法有什么不足之处吗?是的,你的想法是对的,是的,它更好。使用jQuery,它与直接绑定事件一样简单—请查找.delegate()方法。它允许您将事件处理程序放置在容器元素上,并告诉它如何基于普通jQuery选择器将事件路由到处理程序,

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

与其生成事件或将事件绑定到每个单元格,不如放置一个“全局”事件,然后我相信当单击或鼠标悬停事件发生时,它会在整个表上冒泡到我的“全局”事件,然后我会筛选事件调用方并作出反应

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


这种方法有什么不足之处吗?

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

因此:


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

要记住的主要问题是,并不是所有的事件都会在默认情况下冒泡。jQuery试图解决这个问题,但据我所知,表单上的
submit
事件在InternetExplorer中没有出现


另一个要记住的问题是,如果调用
event.stopPropagation()
(或从绑定函数返回false),则不会调用树上更高级别的绑定函数。

我认为您的想法是正确的。你可以这样做:

$("table#yourTable").click(function(evt){
   if($(evt.target).is('td.someTd')) {
     //do whatever you want to do
   }
})
因此,只绑定一个单击事件并过滤单击的目标元素

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