Der Code, den Sie haben, wird sicherlich die Klasse entfernen, aber es entfernt nicht das Klickereignis.
würde ich vorschlagen, Ihr Click-Ereignis zu modifizieren Ereignis Delegation zu verwenden, etwa so:
$('table').on("click", ".clickable", function(){
$(this).removeClass('clickable');
});
Beispiel: https://jsfiddle.net/c6eda0kj/
Warum Delegation Veranstaltung wichtig ist:
Doing etwas wie $('.clickable').click(...)
erzeugt einen Listener für jede Instanz von clickable
. Wenn es 100 .clickable
tds gibt, sind das 100 Listener, die Sie gerade erstellt haben. Unabhängig davon, ob Sie die Klasse aus diesen 100 Elementen entfernen oder nicht, ist das Ereignis bereits angehängt. Um das Ereignis zu entfernen, müssen Sie unbind
oder off
verwenden.
Wenn Sie stattdessen den Hörer auf die table
setzen, wie ich oben habe, haben Sie nur ein einzelnes Ereignis. Wenn dieses Ereignis ausgelöst wird (der Klick auf table
), wird überprüft, ob das angeklickte Element mit dem angegebenen Selektor übereinstimmt. Durch das Entfernen der Klasse wird das Ereignis nicht mehr ausgelöst. Es muss keine Bindung mehr aufgehoben werden.
'$ (this) .unbind()' 'http://api.jquery.com/unbind/ – ppasler
off()' wäre besser. 'unbind()' ist seit einiger Zeit veraltet und in Version 3 veraltet. – isherwood