2016-08-09 8 views
-1

Я нашел странное поведение. Конечно, знаю, но я не знаю, как это исправить.jQuery: изменение класса (но не) изменение действия

У меня есть кнопка, которая должна выполнять 2 разных действия в зависимости от текущего класса.

При нажатии она переключает свой класс, таким образом, в следующем щелчком сделает другое действие .. но он продолжает выполнять «старые» действия, как класс не был изменен

Чтобы быть более ясно ...

здесь относительная Fiddle

вы можете увидеть, что при нажатии кнопки A пишет AAA и две кнопки s переключить их класс (с цвета изменился): поэтому, кажется, все в порядке

Но если нажать еще раз кнопку A вместо того, чтобы писать BBB это то, что должно произойти при нажатии class b кнопку, он снова пишет AAA

Очевидно, может быть 2 кнопки для действия 2 и переключить 2 кнопки вместо обмена классом, но я хотел бы понять, что я делаю что-то неправильно или причина этого странного поведения.

С уважением

+0

Ключевым моментом здесь является то, что у вас есть связать обработчик события с ** элементом **. Изменение значения атрибута элемента (класса в этом случае) не влияет на то, какие обработчики событий привязаны к нему. –

+0

Да, это было ясно и для меня, но не знало, как обращаться. – Joe

ответ

3

Вы должны использовать делегирование события, как вы добавление и удаление классов, которые используются для связывания событий:

$('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

ОК, спасибо, много не знали события делегирование .. но почему downvoted? это такой плохой вопрос? – Joe

+0

@Joe: Не тот, кто downvoted.but вы не добавили код в вопрос. –

+0

Ну, я сделал скрипку, чтобы полностью ее показать, во всяком случае, неважно: важно решить проблему, и ваше предложение это сделало. – Joe

Смежные вопросы