3

これは非常に基本的な質問かもしれませんが、答えが見つかりませんでした。(間違った用語を探しているかもしれません...)

たとえば、変数を共有するために、別のイベント内にイベントを追加する必要があると感じることがあります。しかし、親イベントが発生した回数に応じて、内部のイベントが複数回発生する可能性があることに気付きました。

これが私が話していることの基本的な例です: http://jsfiddle.net/mRc9K/

$('.demo').click(function(){
    $('.hidden').show(function(){
        $('#link').click(function(){
            alert("Clicked"); //fired multiple times
            $(this).parent().hide(); 
        });
    });
});

「最初のクリック」で複数回クリックすると、2 番目のイベントが複数回発生する様子がわかります。

私はその行動を探していません。委任を使用して回避できることはわかって.on()いますが、内部のイベントが複数回発生するのを回避する方法は他にありませんか?

ありがとう。

4

4 に答える 4

2

解決策は、jQuery のone()メソッドを使用することです。

one()- 要素のイベントにハンドラーをアタッチします。ハンドラは要素ごとに最大 1 回実行されます。

この場合、次のようになります。

$('#link').one('click', function(){
   alert("Clicked"); //fired multiple times
   $(this).parent().hide(); 
});

jsFiddle の例はこちら。

于 2013-07-12T10:10:44.303 に答える
1

.one()要素ごとに 1 回だけイベントをバインドする を使用するだけです。

$('.demo').click(function () {
    $('.hidden').show(function () {
        $('#link').one('click', function () {
            alert("Clicked");
            $(this).parent().hide();
        });
    });
});

デモドキュメント

于 2013-07-12T10:12:23.483 に答える
1

変数をフラグとして使用することもできます: Live DEMO

var clicked = false;
$('.demo').click(function(){
    clicked = true;
    $('.hidden').show(function(){
        $('#link').click(function(){
            if(clicked == true){
                alert("Clicked");
                $(this).parent().hide();
                clicked = false;
            }
        });
    });
});
于 2013-07-12T10:14:41.533 に答える