首页 > js 有没有办法 判断一个dom元素是否已经绑定了某个事件??

js 有没有办法 判断一个dom元素是否已经绑定了某个事件??

问题在代码里面,请耐心观看,有劳了,谢谢。

var div = document.getElementById('div');
logEvent('click' , div , false , false , function(){
  console.log('数据测试!');
});
/*
    @param   HTMLElement  ele             绑定事件的元素
    @param   String       eventType       事件类型
    @param   Boolean      isCaptureCatch  是否在捕获阶段触发 
    @param   Boolean      isRepeat        是否允许同类型事件重复绑定
    @param   Function     fn              事件绑定的函数
    @return undefined
*/
function loginEvent(ele , evenType , isCaptureCatch , isRepeat , fn){
  // 一个分支: isRepeat = false 的时候 
  // 我就需要先判断该事件上是否已经绑定了同类型事件(不允许同一元素上重复绑定同一类型事件)
  if (!isRepeat) {
     /* 
       * 判断一个元素上是否已绑定某事件
       * 这个 container 函数怎么实现??求大神指教
     */
     if (!container(ele , eventType)) {
        // 未绑定,所以绑定事件
        ele.addEventListener(eventType , fn , isCaptureCatch);
     }
  }
}

var decorator = function(input, fn) {
    var input = document.getElementById(input);
    if (typeof input.onclick === 'function') {
        var oldClickFn = input.onclick;
        input.onclick = function() {
            oldClickFn();
            fn();
        }
    } else {
        input.onclick = fn;
    }
}

//jQuery event封装支持判断元素上是否绑定了事件,此方法只适用于jQuery绑定的事件
var $events = $("#testdiv").data("events");
if( $events && $events["click"] ){
  // 绑定
}else{
   // 未绑定
}

如果是原生绑定的事件,需要使用插件。
http://stackoverflow.com/ques...


用原生的,确实比较痛苦。不能判断是否已经绑定,但是如果处理函数(对象)未变的话,是可以 remove 的,用 removeEventListener

我还是建议你用 jQuery。jQuery 在删除事件的时候不需要提供原处理函数,而且可以删除所有的某个事件,或者部分某个事件处理函数,比如

$dom.on("click", handler1)
    .on("click.amark", handler2);
    
// 删除标记为 amark 的 click 事件处理函数,也就是 handler2
$dom.off("click.amark")

// 删除所有 click 事件处理函数,也就是 handler1 和 handler2
$dom.off("click");

据我所知原生的不好弄,jq的实现其实很简单
jq的事件都是事件委托,所有的事件都被它存了起来,判断某元素是否绑定了某事件,只需要在事件堆栈里面查询一遍就知道了。

【热门文章】
【热门文章】