1

要素入力の focusin で関数を 1 回だけトリガーしたい。次のコードは、無限ループで関数を呼び出します。

<input type="text" class="dateRangeEducLev">
$(document).on("focusin",".dateRangeEducLev",function(e){    
    alert("focusIn");
});

イベントを「onClick」に変更できますが、入力要素が既に選択されている場合でも、ユーザーが入力要素をクリックするたびに関数が呼び出されます。これは望ましくありません。

伝播を妨げるこの問題を回避しようとしましたが、うまくいきません。これはコードです:

$(document).on("focusin",".dateRangeEducLev",function(e){    
    alert("focusIn");
    e.stopPropagation();
});

http://jsfiddle.net/r1b06udo/1/

伝播を停止する方法、または関数が一度だけ呼び出されるように制限する方法について何か考えはありますか?

更新: off() または one() を使用すると、ブラウザが更新されるまで関数の呼び出しが停止します。別の問題は、同じクラスの要素が複数ある場合、それらの機能が無効になることです。

http://jsfiddle.net/r1b06udo/2/

新しいアップデートがあります。アンバインドとバインドを選択します。あなたが見れば、それは最初のラウンドで機能します。しかし、あなたがまだ集中している場合、彼らは何もしませんが、あなたがまだ集中している場合、それはうまくいくでしょう.

http://jsfiddle.net/456at7y8/

4

2 に答える 2

1

offfocusin ハンドラーを呼び出して、このハンドラーが再度呼び出されないようにすることができます

$(document).on("focusin",".dateRangeEducLev",function(e){    
    alert("focusIn");
    $(document).off("focusin",".dateRangeEducLev");
});

one他の人が指摘したように、通話は他のオプションです。問題は、あなたがやっているように、委任されたイベントでそれを使用できることに気づいていないことですon. そのため、このアプローチを提案しました。

あなたが示したものによると、委任されたイベントは不要に思えますが、念のため保持しようとしました。

于 2014-12-23T02:46:19.450 に答える
1

one() を使用してイベントをバインドします

$(".demo1").on("focusin",function(e){    
    alert("focusIn");
    $( this).unbind( "focusin" );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="dateRangeEducLev demo1"/>
    
<input type="text" class="dateRangeEducLev demo1"/>
<input type="text" class="dateRangeEducLev demo1"/>

于 2014-12-23T02:47:07.970 に答える