0

我们有一种情况,我们面临着事件处理程序被多次绑定到一个元素(由于第三方模块)。

我们可以通过确保仅添加尚不存在的事件处理程序来解决此问题。另一种可能性是在添加之前简单地删除所有事件处理程序。

哪种解决方案是首选?在性能方面有什么重大差异吗?

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');
});
4

1 回答 1

0

使用命名空间事件.off()因为如果其他代码添加了其他点击处理程序,则很容易出现错误

$('#element')
    .off('click.me')
    .on('click.me', function () {
    // do something
    console.log('clicked');
});
于 2013-09-17T11:18:22.073 回答