我有一个大型表/网格,每行包含事件,表格标题等。
而不是我为每个单元格生成事件或绑定事件,最好是设置一个“全局”事件然后我相信当点击或鼠标悬停事件发生时,它会在整个事件中冒泡到我的'全局'事件表然后我过滤事件调用者并做出反应。
我以前读过这个,但不确定我的想法是否正确。
这种做法有什么问题吗?
答案 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
}
})
因此,您只绑定一个单击事件并过滤单击目标元素。