Jquery 事件处理程序不处理动态内容

Jquery 事件处理程序不处理动态内容,jquery,dynamic-content,static-content,Jquery,Dynamic Content,Static Content,我有一个标记a,当单击时,它会附加另一个标记B,以便在单击时执行操作B。所以当我点击标签B时,动作B被执行。但是,上的.on方法似乎无法处理动态创建的标记B 我对标记A的html和jquery如下所示: <a id="address" class="add_address btn btn-inverse btn-medium pull-right push-top">Add Shipping address</a> $('.add_address').click(fun

我有一个标记a,当单击时,它会附加另一个标记B,以便在单击时执行操作B。所以当我点击标签B时,动作B被执行。但是,上的
.on方法似乎无法处理动态创建的标记B

我对标记A的html和jquery如下所示:

<a id="address" class="add_address btn btn-inverse btn-medium pull-right push-top">Add Shipping address</a>

$('.add_address').click(function(){
    //Add another <a>
    $(document).append('<a id="address"  class="pull-right update btn btn-inverse btn-medium push-top">Update</a>');
})
$('.update').on('click',function(){
  //action B
});
我有一些非动态内容,也有class“.update”。在
.on()
中,上述方法对非动态内容有效,但对动态内容无效


如何使其适用于动态内容?

您必须添加选择器参数,否则事件将直接绑定而不是委派,这仅在元素已存在时有效(因此它不适用于动态加载的内容)

将代码更改为

$(document.body).on('click', '.update' ,function(){
jQuery集接收事件,然后将其委托给与作为参数给定的选择器匹配的元素。这意味着与使用
live
时相反,在执行代码时,jQuery set元素必须存在

由于这些答案备受关注,以下是两条补充建议:

1)如果可能,尝试将事件侦听器绑定到最精确的元素,以避免无用的事件处理

也就是说,如果要将类
b
的元素添加到id
a
的现有元素中,则不要使用

$(document.body).on('click', '#a .b', function(){
但是使用

$('#a').on('click', '.b', function(){

2)添加id为的元素时要小心,以确保不会添加两次。在HTML中,两个元素具有相同的id不仅是“非法”的,而且会破坏很多东西。例如,选择器
“#c”
将仅检索一个具有此id的元素。

您在
功能中缺少选择器。
功能:

.on(eventType, selector, function)
这个选择器非常重要

如果新的HTML被注入到页面中,请选择元素和 将新HTML放入页面后附加事件处理程序。或 使用委派事件附加事件处理程序


有关更多详细信息,请参见。

委托
有关1.7:)请注意,委托和on的参数是相反的:它是开的('click','selector',function(){…}),但委托('selector','click',function(){…})这在移动/平板设备上效果不好。我在stackoverflow上看到了这篇文章,这篇文章帮助我决定必须使用Javascript函数的内联调用。问题和答案都很棒。。从昨天起我就绞尽脑汁了#嗯。。我想我刚刚获得了更多的编程技能。您应该使用事件委托在动态添加的DOM元素上绑定事件。