38

たとえば、私が持っているとしましょう

$(element).on('click', function() {/*Some Stuff*/});

どこかで定義されていて、後で同じクリック イベントにさらに機能を追加したいと考えています。私が行った場合

$(element).on('click', function() {/*Other Stuff*/});

"Other Stuff" は "Some Stuff" を上書きしますか?

4

5 に答える 5

30

2 番目のリスナーは最初のリスナーをオーバーライドしません。jQuery イベント ハンドラーは累積的に追加され、アタッチされた順序で実行されます。

1 つのハンドラーが別のハンドラーの実行を妨げるかどうかに影響を与えるのは、関数がブラウザーの既定のクリック ハンドラーをキャンセルする方法 (つまり、リンクの URL に従ってブラウザーを停止する方法) です。

従来の方法を使用する場合:

$(element).on('click', function() {

    /* Some Stuff, do your thing */ 

    return false; 
});

上記のハンドラーは、イベント自体を停止し、他のハンドラーへの伝達を停止します。

ただし、伝播またはハンドラーを停止せずにイベント アクションを停止できます。

$(element).on('click', function(e) {

    // prevent the default action at first, just to make it clear :)
    e.preventDefault(); 

    /* do your thing */

    return /* what you want */;
});

これにより、既定のクリック アクションは発生しませんが、イベントは他のハンドラーに継続されます。jQuery イベントには、知っておく価値のある他の便利なイベント伝播メソッド( など) もあります。Event.stopPropagation()

于 2012-04-23T09:43:09.467 に答える
13

いいえ、イベントは上書きされず、イベント ハンドラーのリストに追加またはプッシュされます。

これはオブザーバー パターンの典型的な使い方です。

http://api.jquery.com/off/またはhttp://api.jquery.com/die/が使用されている場合は、イベントを削除できます.live

于 2012-04-23T09:37:00.693 に答える
4

これはすでに回答されていますが、クリックリスナーが重複している可能性がある状況にあるときに、この問題に通常どのように対処するかを追加すると思いました。

ユーザークエリのオンオフのメソッドだけです...

$(要素).off('クリック'); // onメソッドを使用して、以前に追加したクリック リスナーを削除します

$(element).on('click', function() {/ Some Stuff /}); //追加して、一度だけ実行します

http://api.jquery.com/off/

.off() メソッドは、.on() でアタッチされたイベント ハンドラーを削除します。詳細については、そのページの委任および直接バインドされたイベントの説明を参照してください。引数なしで .off() を呼び出すと、要素にアタッチされているすべてのハンドラーが削除されます。イベント名、名前空間、セレクター、またはハンドラー関数名の組み合わせを提供することにより、特定のイベント ハンドラーを要素から削除できます。複数のフィルター引数が指定されている場合、イベント ハンドラーを削除するには、指定されたすべての引数が一致する必要があります。

于 2016-01-13T22:37:56.587 に答える
4

いいえ、そうではありません。on()bind と同じです。イベントを追加します$.data("events")

ただし、明示的にものを削除できoff()ます。

于 2012-04-23T09:38:53.593 に答える
1

あなたは誤解しています。別のハンドラーを追加しても、最初のハンドラーは上書きされません。

この jsFiddle を参照してください: http://jsfiddle.net/ymuBs/

リンクをクリックすると、コンソールに「1」が書き込まれます。ボタンをクリックすると、別のハンドラーがリンクに追加されます。リンクをクリックすると、「one」と「two」がコンソールに表示されます。

于 2012-04-23T09:38:51.760 に答える