Event handler not working on dynamic content
我有一个标记A,在其中单击时,它会附加另一个标记B来执行单击时的操作B。所以当我点击标签B时,动作B被执行。但是,
我的标签A的html和jquery如下:
1 2 3 4 5 6 | Add Shipping address $('.add_address').click(function(){ //Add another $(document).append('Update'); }) |
单击标记B时,将执行一些操作B。我的jquery如下:
1 2 3 | $('.update').on('click',function(){ //action B }); |
我有一些非动态内容,还有类".update"。在
如何使其适用于动态内容?
您必须添加选择器参数,否则事件将直接绑定,而不是委托,这仅在元素已经存在时有效(因此它不适用于动态加载的内容)。
参见http://api.jquery.com/on/直接和委托事件
将代码更改为
1 | $(document.body).on('click', '.update' ,function(){ |
jquery集接收事件,然后将其委托给与作为参数提供的选择器匹配的元素。这意味着与使用
由于这些答案受到了广泛关注,以下是两个补充建议:
1)在可能的情况下,尽量将事件侦听器绑定到最精确的元素,以避免无用的事件处理。
也就是说,如果要将类
1 | $(document.body).on('click', '#a .b', function(){ |
但使用
1 | $('#a').on('click', '.b', function(){ |
2)在添加具有ID的元素时要小心,以确保不会添加两次。在HTML中,拥有两个具有相同ID的元素不仅是"非法的",而且还会破坏很多东西。例如,选择器
您在
1 | .on(eventType, selector, function) |
这个选择器非常重要!
http://api.jquery.com/on/
If new HTML is being injected into the page, select the elements and
attach event handlers after the new HTML is placed into the page. Or,
use delegated events to attach an event handler
有关详细信息,请参阅jquery 1.9.live()不是函数。