jquery 动态添加的元素,绑定的事件不生效

Posted 猎人在吃肉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery 动态添加的元素,绑定的事件不生效相关的知识,希望对你有一定的参考价值。

1、问题说明

原来的方法:

$('#xxx').on('click', function()
   // 事件处理函数 
);

如果是固定的静态html ,上面的事件是没有什么问题的;
如果 通过Jquery 动态地添加 html 元素,上面的事件不生效,事件没有绑定上。

2、分析

一般情况下,通过 $('#xxx').click(callback) 这种形式去绑定,这种绑定之所以生效是因为,程序加载 $(function() ) (即 load(), 页面加载完成后) 的时候绑定了回调函数, 而动态添加上去的元素,我们并没有去绑定事件。

因此, 动态添加的元素,点击的时候并不会触发我们想要的效果。但是实际上,在我们点击的时候,还是产生了点击事件,只是这个事件没有被我们的预期回调处理,因为我们的回调没有和这个元素关联起来。

jquery 的事件处理函数中,回调的第一个参数就是事件,我们打印一下这个事件,就可以知道,这个事件包含了产生该事件的目标 html 元素。

$('.level').change(function(e)window.e = e;)
console.log(e);

并且,我们也知道,事件是会冒泡的,也就是说,如果我们添加的元素没有绑定事件,没有捕获事件,它就会冒泡,看它上一级是否有捕获,然后一直到 body->document->html 这些元素。

综上所述,我们得到下面的的格式:

父选择器.on("事件类型" , 子选择器 , function()  ... );

说明:

父元素

  • 必须 是固有元素 ,可以直接父元素,也可以是间接父元素。
  • 固有父元素 范围越小越好。
  • 事件类型:跟事件属性和事件函数一一对应。
  • 子选择器:目标元素,跟父选择器构成一个父子选择器。
  • 不但能给固有元素添加事件,还能够给动态生成的元素添加事件。

3、解决方法

动态添加的元素,产生的事件可以在他们父级的元素上获取并处理。

原来的方法:

$('#xxx').on('click', function()
   // 事件处理函数 
);

优化后的:

$(document).on('click', '#xxx', function()
   // 事件处理函数 
);

4、参考

http://t.zoukankan.com/eleven24-p-8057530.html

https://blog.csdn.net/m0_62639693/article/details/126801671

以上是关于jquery 动态添加的元素,绑定的事件不生效的主要内容,如果未能解决你的问题,请参考以下文章

jquery 动态添加的元素,绑定的事件不生效

jquery 动态添加的元素,绑定的事件不生效

用on给动态添加的元素绑定hover事件,没有生效的解决

jquery向元素添加点击事件

jQuery动态添加元素无法触发绑定事件

jquery动态添加元素无法触发绑定的事件的解决方案