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

时间:2010-09-29 13:42:11

标签: javascript jquery

我有一个大型表/网格,每行包含事件,表格标题等。

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

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

这种做法有什么问题吗?

3 个答案:

答案 0 :(得分:2)

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

因此:

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

答案 1 :(得分:0)

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

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

另一个要记住的问题是,如果你调用event.stopPropagation()(或从绑定函数返回false),那么绑定在树上方的函数将不会被调用。

答案 2 :(得分:0)

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

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

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