2016-08-09 52 views
-1

Ich fand ein seltsames Verhalten .. sicherlich ist bekannt, aber ich weiß nicht, wie es zu beheben ist.jquery: Ändern der Klasse (aber nicht) Ändern der Aktion

Ich habe eine Schaltfläche, die abhängig von der aktuellen Klasse 2 verschiedene Aktionen ausführen muss.

Wenn Sie darauf klicken, schaltet er seine Klasse, auf diese Weise bei der nächsten Klick wird eine andere Aktion machen .. aber weiterhin die „alte“ Aktion auszuführen, wie Klasse hat

Um nicht geändert mehr klar ...

hier die relativen Fiddle

Sie sehen, dass, wenn Sie klicken A es AAA und die beiden Tasten schreiben s wechseln ihre Klasse (seit Farben geändert hat): also alles OK

scheint Aber wenn Sie wieder klicken A statt BBB des Schreibens, das, was sollte, ist geschehen, wenn class b Taste gedrückt wird, es wieder schreibt AAA

Natürlich kann man 2 Knöpfe für die Aktion 2 haben und die 2 Knöpfe umschalten, anstatt die Klasse auszutauschen, aber ich würde gerne verstehen, wenn ich etwas falsch mache oder der Grund für dieses seltsame Verhalten.

Grüße

+0

Der entscheidende Punkt hier ist, dass Sie banden den Event-Handler an das ** Element **. Das Ändern des Werts eines Attributs des Elements (in diesem Fall die Klasse) hat keinen Einfluss darauf, welche Ereignisbehandlungsroutinen daran gebunden sind. –

+0

Ja das war auch klar für mich aber wusste nicht wie man damit umgeht. – Joe

Antwort

3

Sie benötigen Ereignis Delegation verwenden, wie Sie das Hinzufügen und Entfernen Klassen, die für die Bindung von Veranstaltungen genutzt werden:

$('body').on('click','.a',function(){ 
    $('#R').html('AAA'); 
    $('#A').addClass('b').removeClass('a'); 
    $('#B').addClass('a').removeClass('b'); 
}); 
$('body').on('click','.b',function(){ 
    $('#R').html('BBB'); 
    $('#B').addClass('b').removeClass('a'); 
    $('#A').addClass('a').removeClass('b'); 
}); 

Working Demo

+0

OK, vielen Dank nicht Ereignisdelegation .. aber warum downvoted? Ist das eine so schlechte Frage? – Joe

+0

@Joe: Nicht derjenige, der downvoted.but Sie haben den fraglichen Code nicht hinzugefügt. –

+0

Nun, ich machte eine Geige, um es vollständig zu zeigen, egal, egal: wichtig ist, das Problem zu lösen, und Ihr Vorschlag hat es getan. – Joe