3

イベントハンドラーを要素にバインドするためにjQueryを使用していますが、通常のJavaScriptを使用して確認する方法もあるかもしれません...

以下に示すようなコードを使用している場合、要素にイベント ハンドラーが既に追加されているかどうかをテストする方法はありますか? 関数を再度実行すると (img src を更新するため)、イベントは 2 回目にバインドされ、次に 3 回目にバインドされます。最も簡単な方法は何ですか?

$(window["tdImg_"+i]).add(window["tdImgSize_"+i]).bind('click', toggleImageSize);
4

2 に答える 2

5

ここに解決策があります:

$(window["tdImg_"+i]).each(function(){
    if(!this.boundToggleImageSize){
        $(this).bind('click', toggleImageSize);
        this.boundToggleImageSize = true;
    }
});

そうすれば、すべてのクリック イベントのバインドを解除する必要はありません (同じ要素に異なる関数がバインドされている場合)。

編集

コメントでミリムースが示唆しているように:

$(window["tdImg_"+i]).each(function(){
    if(!$(this).data("boundToggleImageSize")){
        $(this).bind('click', toggleImageSize);
        $(this).data("boundToggleImageSize",true);
    }
});
于 2012-09-30T20:33:00.790 に答える
3

最も簡単な方法はunbind、イベントbindに戻ってもう一度やり直すことです。

$(window["tdImg_"+i]).add(window["tdImgSize_"+i]).unbind('click').bind('click', toggleImageSize);

eventsそれ以外の場合は、を使用してデータにアクセスし$(el).data("events")、イベントが既にバインドされているかどうかを手動で検出する必要があります。inlineまた、このアプローチではイベント ハンドラーが除外されることに注意してください。

于 2012-09-30T20:31:57.277 に答える