0

ここで何が間違っていますか?ドキュメントを読みましたが、これが意図したとおりに機能しない理由がわかりません。

    $(".img-edit-button").on("click", function () {
       if(self.elementMenuOpen === false){
           self.showImageMenu();
           self.elementMenuOpen = true;
       }else{
           self.hideImageMenu();
           self.elementMenuOpen = false;
       }
});

その後、私は使用しますoff()

$(".img-edit-button").off();

しかし、使用した後でもイベントが倍増しているよう.off()です。

4

5 に答える 5

6

これは、http: //api.jquery.com/off/「off() メソッドは、.on() でアタッチされたイベント ハンドラーを削除する」からそのままです。したがって、off が呼び出された後にクリック イベントをバインドすると、引き続き実行されます。クリックイベントに複数回再バインドしていると思います。

1 つの解決策は、イベントを一度だけ親にバインドすることです。そのため、問題の要素が DOM に追加/削除されるたびに再バインドする必要はありません。これにはパフォーマンス上の問題があるかもしれないことは理解していますが、親クラスを dom のできるだけ深いところに保持すると、これに役立ちます。

$(".someparentclass").on('click','.img-edit-button',function(){});

または、再バインドする場合は、次を使用できます。

$(".img-edit-button").off().on(function(){}); 

http://jsfiddle.net/SEndX/3/

于 2013-01-18T20:37:50.543 に答える
0

これで修正され、空の $(..).on(); が追加されました。ドキュメントの準備ができている方法について。

于 2015-06-15T19:29:37.110 に答える
0

「トグル」機能を使用して、メニューを表示および非表示にすることができます。ここで見つけることができるオプション。

于 2013-01-18T20:26:35.640 に答える
0

イベントを要素に直接バインドしたくない場合があります。むしろ、「body」などの親要素にバインドする必要があります。これは、イベント リスナーをグローバルに定義したいが、要素がまだ存在しない可能性がある場合に不可欠です。

$("body").on("mouseenter", ".hover-item", function() {
    // do the thing
}

ここでの問題は、実行しよう.off()として.hover-itemもうまくいかないことです。.off()または、 onを使用しようとしてもbody、 using.children()は何もしません。

を使用する代わりに.off()、イベントを特定のクラス名にバインドし、それらのイベントを無効にする場合はクラス名を削除するのがベスト プラクティスだと思います。

$(".the-element").removeClass(".hover-item");

その特定の要素では、イベント リスナーが有効になりません。ただし、 でイベント リスナーを技術的に定義したbodyため、後でホバー効果を再度有効にする必要がある場合は、 を使用するだけaddClass(".hover-item")ですべてが正常に機能します。

これは、複数のアイテムに対して 1 つのアニメーションを使用する場合にのみ適用されます。ホバー イベントは、この良い例です。たとえば、異なるボタンに異なるホバー イベントを適用する代わりに、すべてのボタンに同じイベントを適用できます。ただし、特定のボタンのホバー イベントを無効にしたいだけの場合は、これが適しています。

于 2016-06-06T05:58:03.537 に答える
0

古いですが、誰かがまだこれに出くわす可能性があると考えただけです。何も割り当てられていないと機能しません。常にエラーが発生するわけではありませんが、コードが正しく実行されなくなります。ページの読み込み時に、空白の on イベントを必ず追加してください。$('#selector').on(); とにかく私のために働きます。

于 2015-05-20T21:49:12.700 に答える