2017-03-06 14 views
0

JQueryでイベントバインディングに問題が発生しています。ユーザーが値を変更するかどうかを知りたい多くのインプットがあります。私は彼らのイベントを添付これらの方法:バインド前に実行されたイベントとバインド後に発生したイベント

$(document).on("change", ".myClass", changed); 

しかし、時には我々は、これらのフィールドの上に自動変更を実行する必要があり、私はこれらのイベントのバインドを解除、変更を実行し、これらの更新に変更トリガーされることがないようにするために、再びイベントをバインドします。

$(document).off("change", ".myClass"); 
$(".myClass").val(whatever); 
$(document).on("change", ".myClass", changed); 

しかし、我々は我々がすることを得る。この最後の工程の後に、これらの入力のいずれかでクリックした場合、それが更新されたとき、フィールドはすべてのイベントを添付していなかった場合でも、変更イベントが発生します。フィールドがフォーカスを失うまで変更イベントは発生しませんが、この動作を理解することはできません。

助けや説明が必要です。

ありがとうございます。

申し訳ありません、私はchange()の代わりに変更を意味しました。

$(document).on("change", ".myClass", changed); 

$(document).on("change", ".myClass", changed()); 

から

+2

関数の*戻り値*ではなく、関数の*参照*を委譲されたイベントハンドラに渡す必要があります: '$(document).on( 'change'、 '.myClass'、changed)'。また、要素の値をプログラムで変更しても、changeイベントは発生しないので、ロジックは問題ではないことにも注意してください。https://jsfiddle.net/2185v3z5/ –

+0

あなたの例では、イベントの提起は私のコードで起こるので、私は私が見たことのない問題があることに気をつけなければならない。あなたの助けに感謝します。 – MKP

答えて

1

変更一番上の行は、あなたはメソッドchanged()を呼び出し、changed()メソッドからの戻り値を提供しています。

1

括弧を付けたchanged()のような関数名は、関数をすぐに呼び出します。つまり、3番目の引数が実際に関数changedの戻り値を渡しています。イベントが発生したときに今すぐあなたのchanged機能のみ発動する

$(document).on("change", ".myClass", changed); 

:次のような行を変更する必要があります。

関連する問題