3

製品コンフィギュレーターがあるページがあります。このコンフィギュレーターは ajax .load を使用して、さまざまな製品のコンフィギュレーターをロードします。

誰かが製品を構成し、送信をクリックすると、製品が追加され、ユーザーがコンフィギュレーターを再度選択して同じ製品をロードすると、コンフィギュレーターのすべてのイベントが 2 倍になります。つまり、すべてのイベントが 2 回発生します...

これらのイベントをリセットする、またはこれらのイベントが複数回発生するのを防ぐ最善の方法は何でしょうか?

4

3 に答える 3

3

バインドに使用する構文はわかりませんが、on()を使用して jQuery 1.7 を使用している場合は、次のことができます。

$("#myButton").off("click").on("click", function(){
    // ....
});

これにより、すべてのクリック イベントが最初にバインド解除され、次にクリック イベントがバインドされます。ただし、これにはリスクが伴います。名前空間を介して多数のクリック イベントがバインドされている場合、意図していなくても削除される可能性があります。

イベントが名前空間を使用している場合、次のようになります。

$("#myButton").off("click.myNamespace").on("click.myNamespace", function(){
    // ....
});

イベントをバインドする必要があり、それを1つだけ使用してから自動的にアンバインドする場合は、次のように one() を使用できます

$("#myButton").one("click", function(){
    // ....
});

明確にするために、 orなどにチェーンせずにoff()orを単独で使用することもできます。 ただし、バインディングに使用する場合は注意が必要です。の多くの欠点の 1 つは次のとおりです。unbind()on()bind()unbind()live()live()

.live() メソッドは、驚くべき方法で他のイベント メソッドとやり取りします。

その他のリソース

click() - bind に似てい
ますbind() - jQuery 1.7 より前の静的要素の優先バインディング
live() (使用しないでください) - 1.7 以降は非推奨ですが、1.7 より前のバージョンも使用しないでください
delegate() - 動的要素の優先バインディングjQuery 1.7 より前の
on() - jQuery 1.7 以降の静的/動的要素の優先バインディング

于 2012-08-15T22:33:23.777 に答える
0

イベントをバインドする方法に応じて、.unbind()orを使用する必要があり.off()ます (使用し.live()ている場合は非推奨であり、に切り替える必要があります.on()) 。

jQuery にはNamespaced Eventsに関するすばらしいページがあり、追加したイベント ハンドラーのみをアンバインドする方法を示しています。

于 2012-08-15T22:32:40.053 に答える
0

を使用して.live()います。

私にとって最も簡単な解決策は、.die().live()ステートメントの前に a を置くことであることがわかりました。

例:

$('.add').die();
$('.add').live(...............

http://api.jquery.com/die/

于 2012-08-16T15:33:36.463 に答える