jquery $(' body')。on('点击')总是需要.off('点击')以避免多个事件触发

时间:2012-09-19 14:03:57

标签: jquery jquery-on

我有一个页面,我列出了我的船员(show_crew.php)。该页面使用无限滚动插件运行,就像Google Images一样。首先,我显示10个条目。如果用户到达show_crew.php的底部,则会将旧的“show_crew.php”附加到旧的“show_crew.php”,显示接下来的10个条目。

我在show_crew.php中嵌入了一些Jquery函数,在那里我通过

绑定事件
$('body').on('click', 'myButton[rel=<? echo $user['id'] ?>]', function() {
    console.log('foo');
})​

现在,当show_crew.php被多次追加时,该事件也会多次绑定到同一个按钮。我可以通过$('body').off('click', 'myButton')每个时间来解决这个问题。

这看起来很难看。有更优雅的方式吗?

感谢, 亚光

1 个答案:

答案 0 :(得分:18)

您只需要绑定委派的事件一次。每次加载内容时都不要重新绑定。

使用$('body').on('click', '...selector...', function () {...})格式将事件处理程序委托给<body>元素。这意味着正文将捕获所有click个事件并检查它们是否发生在与...selector...匹配的元素上。如果是这样,它将触发事件处理程序,就好像它是在匹配的元素上触发的

一旦添加了委托侦听器,就不必担心重新绑定,因为<body>的子节点可以更改,并且委托将保留新元素。这是非常好的东西™