我正在使用 jQuery 将事件处理程序绑定到元素,但也许还有一种方法可以使用普通 JavaScript 进行检查......
如果我使用如下所示的代码,有没有办法测试元素是否已经添加了事件处理程序?当我再次运行该函数(以更新 img src)时,事件被第二次绑定,然后下一次绑定第三次,等等。最简单的方法是什么?
$(window["tdImg_"+i]).add(window["tdImgSize_"+i]).bind('click', toggleImageSize);
这是一个解决方案:
$(window["tdImg_"+i]).each(function(){
if(!this.boundToggleImageSize){
$(this).bind('click', toggleImageSize);
this.boundToggleImageSize = true;
}
});
这样,您不必取消绑定所有点击事件(如果您在相同元素上有不同的绑定函数)。
编辑
正如millimoose在评论中所建议的那样:
$(window["tdImg_"+i]).each(function(){
if(!$(this).data("boundToggleImageSize")){
$(this).bind('click', toggleImageSize);
$(this).data("boundToggleImageSize",true);
}
});
最简单的方法是unbind
事件并再次bind
重新进行:
$(window["tdImg_"+i]).add(window["tdImgSize_"+i]).unbind('click').bind('click', toggleImageSize);
否则,您必须使用 访问events
数据,$(el).data("events")
并手动检测事件是否已绑定。另请注意,此方法不包括inline
事件处理程序。