3

クラス「foo」を削除できないようで、その理由がわかりません。ユーザーが.fooをクリックすると、jQueryは.fooを削除すると想定されます。一見すると、テキストが赤くなくなったので機能しているように見えます。ただし、.fooを数回クリックすると、アラートボックスが表示されるため、.fooが完全に削除されていないことを意味します。なぜこれが起こっているのか分かりません。

jQuery:

$(document).ready(function() {
    $('.foo').click(function() {
        $(this).removeClass('foo');
        alert('Class .foo should have been removed. Why is this alert still appearing?');
    });             
});​

html:

<p class="foo">foo</p>​

css:

.foo { color: red; }​

http://jsfiddle.net/Nvrp8/

4

4 に答える 4

5

クリックリスナーのバインドを解除する必要があります。

http://jsfiddle.net/Nvrp8/2/

$(document).ready(function() {
    $('.foo').click(function() {
        $(this).removeClass('foo');
        alert( 'Class .foo should have been removed. Why is this alert still appearing?' );     
        $(this).unbind('click');        
    });             
});​
于 2012-08-31T17:16:18.500 に答える
4

on()を使用すると、イベントは「.foo」ではなく本体にバインドされるため、クリックごとにセレクターが実際に評価されます。

$(document).ready(function() {
    $("body").on("click", ".foo",function() {
        $(this).removeClass('foo');
        alert( 'Class .foo should have been removed. Why is this alert still appearing?' );       
    });             
});​

http://jsfiddle.net/Nvrp8/8/

于 2012-08-31T17:18:55.647 に答える
3

を実行すると、その時点$('.foo')で持っている要素の静的セットを取得します。したがって、後でそれらの要素から取得した場合でも、リスナーをその元の要素のセットにバインドします。class="foo" removeClass('foo')

.onその動作を変更したい場合は、またはを検討して.delegateください。

于 2012-08-31T17:18:49.340 に答える
1

それはうまく機能しています、リスナーはまだバインドされています。http://jsfiddle.net/Nvrp8/5/

于 2012-08-31T17:17:58.070 に答える