什么是更好的:测试是否绑定了事件处理程序或直接使用.off()

时间:2013-09-17 11:15:12

标签: javascript jquery

我们遇到的情况是,事件处理程序多次绑定到一个元素(由于第三方模块)。

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

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

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

1 个答案:

答案 0 :(得分:0)

namespaced event.off()一起使用,因为如果某些其他代码添加了其他点击处理程序,则容易出错

$('#element')
    .off('click.me')
    .on('click.me', function () {
    // do something
    console.log('clicked');
});