Events on dynamically added classes

2019-03-05 02:40发布

I have a form where the class of the button is dynamically changing, depending up where the request is coming from. I am trying to capture the onclick event, but it does not take in the dynamically added class. I made sure that the class is being added to the button. Where can I be going wrong.

Snippets --

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

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

OnClick --

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

The code does not get to this event event though the button class is changed to newClass.

Thanks

4条回答
倾城 Initia
2楼-- · 2019-03-05 03:17

Setting event handlers through methods like .bind (or shortcuts like .click) are only set for elements that currently match the selector. If you want to set up the event handler for elements that currently match as well as all future matches then you should use .on.

查看更多
看我几分像从前
3楼-- · 2019-03-05 03:21

You can try adding the click functionality directly to the button when the DOM loads, and just use .hasClass() to check if the newClass has been applied or not.

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

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

查看更多
Deceive 欺骗
4楼-- · 2019-03-05 03:38

I fixed the problem using the delegate method provided by JQuery.

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

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

Thanks for the help.

查看更多
干净又极端
5楼-- · 2019-03-05 03:41

Thats cause when you bind the click event the element has another class.

Try somesthing like this:

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

Example

查看更多
登录 后发表回答