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



我有一个页面列出了我的船员(show_crew.php)。该页面使用无限滚动插件运行,就像谷歌图片一样。起初,我显示 10 个条目。如果用户到达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')来解决这个问题。

这看起来很丑陋。还有比这更优雅的方式吗?

谢谢马 特

只需绑定一次委托事件。不要在每次加载内容时重新绑定。

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

添加委托侦听器后,无需担心重新绑定,因为<body>的子项可能会更改,并且委托将保留新元素。这是一件非常好的事情™

最新更新