0

イベントハンドラーが要素に複数回バインドされている状況に直面しています (サードパーティのモジュールが原因で)。

これを回避するには、イベント ハンドラーが存在しない場合にのみイベント ハンドラーを追加するようにします。もう 1 つの可能性は、追加する前にすべてのイベント ハンドラーを単純に削除することです。

どのソリューションが好ましいですか? 性能面で大きな違いはありますか?

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 に答える