3

我正在使用 jQuery 将事件处理程序绑定到元素,但也许还有一种方法可以使用普通 JavaScript 进行检查......

如果我使用如下所示的代码,有没有办法测试元素是否已经添加了事件处理程序?当我再次运行该函数(以更新 img src)时,事件被第二次绑定,然后下一次绑定第三次,等等。最简单的方法是什么?

$(window["tdImg_"+i]).add(window["tdImgSize_"+i]).bind('click', toggleImageSize);
4

2 回答 2

5

这是一个解决方案:

$(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);
    }
});
于 2012-09-30T20:33:00.790 回答
3

最简单的方法是unbind事件并再次bind重新进行:

$(window["tdImg_"+i]).add(window["tdImgSize_"+i]).unbind('click').bind('click', toggleImageSize);

否则,您必须使用 访问events数据,$(el).data("events")并手动检测事件是否已绑定。另请注意,此方法不包括inline事件处理程序。

于 2012-09-30T20:31:57.277 回答