Jquery 事件处理程序不处理动态内容
我有一个标记a,当单击时,它会附加另一个标记B,以便在单击时执行操作B。所以当我点击标签B时,动作B被执行。但是,上的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
.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
的元素添加到ida
的现有元素中,则不要使用
$(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元素上绑定事件。