0

コードを介して<input>、またはマウス クリックの結果としてフォーカスを設定できる要素があります。

ユーザーが入力をクリックすると、clickイベント ハンドラーが起動します。要素が他の方法 (コードなど) を介してフォーカスを受け取る場合は、clickイベントを手動でトリガーして、ハンドラーも起動するようにします。

私はこれを行うことができます:

$elem = $('input');
$elem
    .on('focus', function() { $(this).trigger('click') })
    .on('click', function() { alert('Clicked!') });

ただし、これによりclickハンドラーが 2 回起動されます。イベントのために 1 回、clickイベントのために 1 回focus

クリック イベントの結果としてフォーカスが受信されなかっclickた場合にのみ、ハンドラーを選択的にトリガーする方法はありますか?


アップデート

これは私の問題の非常に単純化されたバージョンであるため、両方のハンドラーをfocusイベントにバインドするなどのことはできません。2 つのサードパーティのコードをマージしようとしています。

4

4 に答える 4

1

この.trigger()関数は、イベント オブジェクトにプロパティを追加しisTriggerて、イベントがその使用によってトリガーされたことを識別します。ただし、プロパティはまだjQuery 1.8.3に存在することは文書化されていませんが、内部でのみ使用されているようです。

とにかく、extraParametersパラメーターを使用してカスタム プロパティをイベント オブジェクトに追加できます。例えば、

$(this).trigger('click', {
    isTrigger: true
});

isTrigger将来のリリースで廃止されても、互換性は維持されます。

于 2012-12-05T18:56:42.050 に答える
-1
$elem = $('input');
$elem
    .on('focus', function() { alert("Focused!") })

フォーカスは、タブを使用して入力をフォーカスするか、クリックするか、または .focus() を使用して起動できます。

on('click', ...) の理由はありますか?

于 2012-12-05T18:42:03.477 に答える