2013-08-21 2 views
0

У меня есть форма, в которой класс кнопки динамически изменяется, в зависимости от того, откуда идет запрос. Я пытаюсь захватить событие onclick, но он не принимает динамически добавленный класс. Я убедился, что класс добавляется к кнопке. Где я могу ошибиться.События с динамически добавленными классами

Отрывки -

$('.button').removeClass('oldClass'); 
    $('.button').addClass('newClass'); 

    <button class = "button">Button</button> 

OnClick -

 $('.newClass').click(function(){ 
      alert("test"); 
    }); 

код не получит на это событие событие, хотя класс кнопка меняется на NewClass.

Благодаря

+0

Выбираете элементы и привязываете обработчик к согласованным элементам. Если элементы не имеют этого класса во время выбора, они не будут выбраны, и поэтому они не получат привязки обработчика. –

+0

JQuery применяет функцию щелчка при загрузке объекта DOM (при первом обновлении страницы). Так как кнопка не имеет нового класса в это время, она никогда не получает функцию щелчка, установленную для нее. – Tricky12

+0

В примере я привязываю событие к имени newClass. – Fox

ответ

3

Вот причина, когда вы связать событие щелчка элемент имеет другой класс.

Try somesthing так:

$('body').on('click', '.newClass', function() { 
     alert('test'); 
    }); 

Example

0

Установка обработчиков событий с помощью методов, таких как .bind (или ярлыки, как .click) устанавливаются только для элементов, которые в настоящее время соответствуют селектору. Если вы хотите настроить обработчик событий для элементов, которые в настоящее время соответствуют, а также все будущие совпадения, вы должны использовать .on.

0

Вы можете попробовать добавить функцию щелчка непосредственно к кнопке при загрузке DOM и просто использовать .hasClass(), чтобы проверить, был ли применен newClass или нет.

$('.button').click(function() { 
    if($(this).hasClass('newClass')) { 
     //Code for new class click 
     alert('test'); 
    } 
}); 

JSFiddle: http://jsfiddle.net/yRySK/1/

0

Я установил проблему, используя метод делегата, предоставленную JQuery.

$('body').delegate('.newClass','click', delegatefunction); 

function hasClass() { 
    alert("Hello!!"); 
} 

Спасибо за помощь.