我们有一种情况,我们面临着事件处理程序被多次绑定到一个元素(由于第三方模块)。
我们可以通过确保仅添加尚不存在的事件处理程序来解决此问题。另一种可能性是在添加之前简单地删除所有事件处理程序。
哪种解决方案是首选?在性能方面有什么重大差异吗?
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');
});
}
或者
$('#element')
.off
.on('click', function () {
// do something
console.log('clicked');
});