Es ist wie Sie eher als statische Event-Handler Event-Handler delegiert werden wollen verwenden aussieht. Lassen Sie mich erklären.
Wenn Sie eine Codezeile wie folgt ausführen:
$('.disabled > a').click(function (e) {
dies einen Ereignishandler auf alle Objekte installiert werden, die in diesem Moment in der Zeit des Wahl entsprechen. Diese Ereignishandler sind dann für immer vorhanden. Sie schauen nicht mehr auf welche Klassen irgendwelche Elemente haben. Wenn Sie also nach der Installation eines statischen Ereignishandlers eine Klasse ändern, wirkt sich dies nicht darauf aus, auf welchen Elementen Ereignishandler vorhanden sind.
Wenn Sie dynanamic Verhalten wollen, wo welche Elemente auf ein Ereignis reagieren auf abhängt, welche Klassen vorhanden sind, zu einem bestimmten Zeitpunkt, dann müssen Sie Umgang mit delegierten Ereignis verwenden.
Mit delegierten Event-Handling, befestigen Sie das Ereignis „dauerhaft“ zu einem übergeordneten und wertet dann die Eltern, ob das Kind, wo das Ereignis jedes Mal das Ereignis ausgelöst entspricht der Auswahl entstanden. Wenn das Kind nicht mehr mit der Auswahl übereinstimmt, wird der Ereignishandler nicht ausgelöst. Wenn dies der Fall ist, wird dies geschehen und Sie können eine Klasse hinzufügen/entfernen, um das Verhalten zu ändern.
Die allgemeine Form von delegierten Event-Handler sind wie folgt aus:
$("#staticParent").on("click", ".childSelector", fn);
Sie mögen im Idealfall einen Elternteil wählen, die möglichst nahe an das Kind wie möglich ist, ist aber selbst nicht dynamisch. In Ihrem speziellen Beispiel zeigen Sie kein Elternteil anderen als der Körper Objekt, so dass Sie diese verwenden:
$(document.body).on("click", ".disabled > a", function() {
e.preventDefault();
e.stopPropagation();
alert('should stop working');
});
Dieser Code wird dann dynamisch reagieren, wenn Sie die disabled
Klasse hinzufügen entfernen. Wenn die Klasse disabled
vorhanden ist, wird der Ereignishandler ausgelöst. Wenn es nicht vorhanden ist, wird der Ereignishandler nicht ausgelöst.
Arbeits Demo: http://jsfiddle.net/jfriend00/pZeSA/
Weitere Referenzen auf delegierten Ereignisbehandlung:
jQuery .live() vs .on() method for adding a click event after loading dynamic html
jQuery .on does not work but .live does
Should all jquery events be bound to $(document)?
JQuery Event Handlers - What's the "Best" method
jQuery selector doesn't update after dynamically adding new elements
Selbst zu überprüfen, ob Sie die Klasse entfernt haben, hat sich die Aktion bereits an das Element gebunden ist. Es wird nicht automatisch gelöst. –