live
動的ページ(ページはAjax経由で表示されます)でjQuery関数を使用するとlive
、で検出されたボタンイベントが重複します。そして、これらのボタンを含むページにアクセスするたびに、ワンクリックで何度も機能が実行されます。
どうすればこれを修正できますか?
live
動的ページ(ページはAjax経由で表示されます)でjQuery関数を使用するとlive
、で検出されたボタンイベントが重複します。そして、これらのボタンを含むページにアクセスするたびに、ワンクリックで何度も機能が実行されます。
どうすればこれを修正できますか?
これは、同じハンドラを同じイベントに複数回アタッチしたことを意味します。
コードがなければ、これ以上のヘルプを提供することはできませんが、自分で修正する方法を知っていると確信しています:-)
.on()
and.off()
を使用することをお勧めし.live()
ます
.off()
そこでできることは、要素にバインドする前に設定.on()
して、以前のすべてのイベント ハンドラーが確実に削除されるようにすることです。
コードを提供していないので、何が問題なのか推測しました。
.live()
すべての ajax 応答で、DOMは、新しく挿入された DOM のイベントをリッスンするために再度呼び出すコードで変更されると思います。.on()
今、私が以前に言ったこと.off()
から、すでに救助に来ています。を呼び出し.off()
て、既存のすべてのイベント ハンドラーが削除されていることを確認してから、すべてのイベント リスナーを再作成します。.on()
おそらく (不注意で) 同じ要素でイベントを複数回再バインドしてlive()
います (たとえば、ライブ イベントをバインドするコードが数回繰り返されています)。使ってみてくださいone()
; これは1 回だけバインドし、まったく同じイベントが既に要素にバインドされている場合は再バインドしません。
使用例:
$("#foo").one("click", function() {
//event on click, bind this just once, even if this block of code is repeated
});
を使用してイベントをリンククリックにバインドするとします。これは、クリックごとにアクションをone()
実行 (および実行を継続) しますが、クリックごとに xxx 回 (xxx はバインドされた回数) 起動しないようにします。