如何检查事件处理程序是否已绑定到元素?

the*_*axx 3 jquery bind

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

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

$(window["tdImg_"+i]).add(window["tdImgSize_"+i]).bind('click', toggleImageSize);
Run Code Online (Sandbox Code Playgroud)

mbi*_*tte 5

这是一个解决方案:

$(window["tdImg_"+i]).each(function(){
    if(!this.boundToggleImageSize){
        $(this).bind('click', toggleImageSize);
        this.boundToggleImageSize = true;
    }
});
Run Code Online (Sandbox Code Playgroud)

这样,您就不必解除所有单击事件的绑定(如果在相同元素上有不同的绑定功能).

编辑

正如millimoose在评论中所建议的那样:

$(window["tdImg_"+i]).each(function(){
    if(!$(this).data("boundToggleImageSize")){
        $(this).bind('click', toggleImageSize);
        $(this).data("boundToggleImageSize",true);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我使用`.data()`而不是DOM元素的属性.此外,"绑定",而不是"绑定".(对不起,小鬼.) (2认同)