8

私の最新のコードにはfocus、テキストエリアのイベント ハンドラーがあります。ユーザーがテキストエリアをクリックすると、そのイベントハンドラーがトリガーされ、選択したテキストエリアに基づいて他の DOM 状態が設定されます。focusただし、プログラムの他の場所では、そのイベントハンドラーをトリガーせずにテキストエリアのをプログラムで設定したいと考えています。たとえば、バックボーンにはsilentlyアクションを実行する方法があることを知っています。

私の唯一の疑似解決策は、一時的に変数を設定することです:

var silence = true;

次に、イベント ハンドラーで、silence が false の場合にのみロジックを実行します。ハンドラーは引き続きトリガーされますが、ロジックは実行されません。

他の誰かがこれのためのより良い戦略を知っていますか?

4

5 に答える 5

5

次のように、一時的unbind()にイベントを実行できます。

フォーカスイベントを処理する次のシナリオがあります。

function focus_handler() {
   //focus handler code
   ...
   ...
}

$('#yourelement').bind('focus', focus_handler);

次に、イベントハンドラーをトリガーせずに、プログラムで要素にフォーカスするコードの部分について説明します。

$('#yourelement').unbind('focus');
$('#yourelement').focus();
$('#yourelement').bind('focus', focus_handler);
于 2012-10-25T23:33:26.633 に答える
3
<input type="text" name="input" id="input" value="0">
<input type="text" name="input" id="input2" value="0">

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
<script>
$(function() {

$('#input').focus(function(a,b) {
   if (b) alert('forced');
});

$('#input').trigger('focus', jQuery.Event("focus"));

});
</script>

bイベント ハンドラの引数が存在する場合、 を呼び出すことによってイベントがトリガーされます$('#input').trigger('focus', jQuery.Event("focus"));。したがって、通常のフォーカスまたは強制フォーカスに応じてハンドラー関数を実行させることができます。

于 2012-10-25T23:38:51.790 に答える
3

jQuery ではtrigger()、イベントの名前空間を取ることができます。この名前空間とデフォルトの動作にバインドされたイベントのみがトリガーされます。

たとえば、次のようになります。

$('#yourelement').trigger('focus.anyOldNonsense');

トリックを行う必要があります (誰も「anyOldNonsense」をイベント名前空間として使用していない場合)。

編集: これは 1.7.2 と 1.8.3 で機能しますが、1.9 以降ではデータと名前空間を「フォーカス」イベントに追加する既知のバグがあります。

于 2013-09-12T12:16:02.710 に答える
0

イベントの発生を防ぐことはできないため、イベントを発行するかどうかを決定する何らかの仲介者が必要です。そのため、仲介者にすべてのフォーカス イベントをリッスンさせ、その仲介者にイベントを再発行するかどうかを伝える必要があります。次に、dom ノードではなく、その仲介者を直接リッスンします。

于 2016-10-29T22:57:09.677 に答える
-1
<a href='javscript:void()' onClick="()=>myFunction(myParams)">click here</a>

このハックを試して、インスタンス化時に起動せずに onClick 関数を params で設定してください。

于 2016-12-01T08:55:45.160 に答える