我们遇到的情况是,事件处理程序多次绑定到一个元素(由于第三方模块)。
我们可以通过确保仅添加事件处理程序(如果它尚不存在)来解决此问题。另一种可能性是在添加之前简单地删除所有事件处理程序。
首选哪种解决方案?在性能方面有什么重大差异吗?
function hasEventHandler(element, event) {
var ev = $._data(element, 'events');
return (ev && ev[event]) ? true : false;
}
if ( !hasEventHandler($('#element')[0], 'click') ) {
$('#element').on('click', function () {
// do something
console.log('clicked');
});
}
OR
$('#element')
.off
.on('click', function () {
// do something
console.log('clicked');
});
答案 0 :(得分:0)
将namespaced event与.off()
一起使用,因为如果某些其他代码添加了其他点击处理程序,则容易出错
$('#element')
.off('click.me')
.on('click.me', function () {
// do something
console.log('clicked');
});