2010-12-09 8 views
4

Verzeihen Sie mir, ein Noob zu sein, aber sollte das nicht funktionieren?.removeClass funktioniert nicht wie addClass?

$(document).ready(function() { 
    $('.button').click(function() { 
     $(this).addClass('button-clicked'); 
    }); 

    $('.button-clicked').click(function() { 
     $(this).removeClass('button-clicked'); 
    }); 

}); 

Sollte der zweite Klick nicht die Klasse entfernen und zurück zu .button bringen?

Hier ist es auf jsfiddle: http://jsfiddle.net/pXdwM/

Antwort

9

nein, denn an dem Punkt, Sie zum zweiten click() ruft die Schaltfläche nicht „.Taste geklickt“ hat und daher Event-Handler nicht zugeordnet ist. Man könnte es umschreiben wie diese

$('.button').click(function() { 
    $(this).toggleClass('button-clicked'); 
}); 

oder live()

$('.button-clicked').live("click", function() { 
    $(this).removeClass('button-clicked'); 
}); 
+1

Auch wenn er 'verwendet .button' als Selektor, ** ** beide klicken Handler ein laufen würde nach die andere, effektiv hinzufügen und entfernen Sie die Klasse für jeden Klick. (Nur den Code in der Frage kommentieren.) –

+0

Super, jetzt bekomme ich es! Ich werde nicht einmal vorgeben zu wissen, was .live() tut, aber ich verstehe .toggleClass, also werde ich das verwenden. Danke, Mann. – izolate

+1

@yatman, .live wird Ereignisse zukünftiger Elemente binden, für alle Elemente, die zur Laufzeit hinzugefügt werden, wenn wir binden wollen, müssen wir .live verwenden – kobe

2

verwenden Sie ein Ereignis mit Klasse zu jedem Element hinzufügen ‚.Taste geklickt‘, aber die Klasse gilt nicht, bis Sie tatsächlich klicken . Sie müssen also den zweiten Hörer in den ersten Rückruf bewegen, oder verwenden Sie die toggleClass Funktion:

$('.button').click(function() { 
    $(this).toggleClass('button-clicked'); 
}); 
+0

Das funktioniert, danke dave. – izolate

Verwandte Themen