jQuery事件和双触发

jQuery events and double firing?

本文关键字:事件 jQuery      更新时间:2023-09-26

当我用AJAX动态加载jQuery时,具有现有事件的元素会触发多次。

基本上我有一个名为'myjs.js'的文件,其中包含我所有的jQuery,并在页面加载时包含,因此设置事件等元素。

现在,当用户触发一个事件,如发布一个新的评论,它发送(通过Ajax)的评论,然后它返回一个新的评论,编辑评论,回复等页面。显然,当myjs.js第一次加载时,它没有为新加载的元素创建任何事件。因此,我将myjs.js包含在AJAX返回的页面中。

由于myjs.js已经被加载到页面中,当Ajax页面包含myjs.js返回时,它会向已经加载到页面中的元素添加另一个事件。

我已经试过了

$('*').unbind();

但这引起了一些奇怪的效果。

所以关于动态加载jQuery而不影响任何已经存在的元素事件的想法?

在没有看到jQuery代码的情况下,我怀疑用于绑定行为的选择器太过通用,所以正如您所发现的那样,所有现有元素加上新加载的元素每次都是匹配的:

可以在AJAX响应返回的JavaScript中使用更具体的绑定,将行为仅添加到新加载的元素中

但是,为每个AJAX请求返回相同的JavaScript是低效的,因为浏览器无法缓存。理想情况下,您应该尝试在主页上加载一次JavaScript,然后依靠jQuery为新加载的元素自动执行.live()绑定。这也称为事件委托- .delegate()

请注意,从jQuery 1.7开始,这些方法已经被弃用,取而代之的是更简洁的事件绑定基础结构——.on()