jQuery не распознает: не (.className) фильтрация
Когда я динамически добавляю класс к элементу, псевдофильтрация не распознает этот класс. Эта проблема возникает, когда я использую функцию on(), но все нормально, когда я использую live ()
В начале все элементы списка кликабельны. Но после нажатия кнопки "Ipsum" больше не должен нажимать на кнопку, и не должно появляться другое сообщение "Неактивно".
$('.item:not(.active)').on('click', function(){
$('<p>Not active</p>').appendTo('body');
});
4 ответа
Решение
$('body').on('click', '.item:not(.active)', function(){
$('<p>Not active</p>').appendTo('body');
});
Использование $(document).on
$(document).on('click','.item:not(.active)', function(){
$('<p>Not active</p>').appendTo('body');
});
DEMO
Это правильное поведение. Вы добавляете события в неактивные элементы (все 3 элемента.). Таким образом, он не будет отменять привязку событий, если вы добавите класс.
Я бы сделал что-то вроде этого:
$('input[type=button]').click(function(){
$('.item:nth-child(2)').addClass('active').css('color','#F00');
});
$('.item').on('click', function() {
if($(this).is('.active')) return;
$('<p>Not active</p>').appendTo('body');
});
$(document).on('click','.item:not(.active)', function(){
$('<p>Not active</p>').appendTo('body');
});