使用removeHandler句柄时没反应,没有删除事件程序

来源:2-4 IE事件处理程序及跨浏览器解决

qq_巧诈不如绌诚_0

2018-05-18 23:29

<input type="button" name="" value="按钮" id="btn" />

var eventUtil={

addHandler:function(element,type,handler){//添加句柄

if(element.addEventListener){//DOM 二级

element.addEventListener(type, handler, false);

}else if(element.attachEvent){//低版本浏览器(IE9以下)

element.attachEvent('on'+type,handler);

}else{//DOM 零级

element['on'+type]=handler;//element.onclick === element['onclick']

}

},

removeHandler:function(element,type,handler){//删除句柄

if(element.removeEventListener){

element.removeEventListener(type, handler, false);

}else if(element.detachEvent){

element.detachEvent('on'+type,handler);

}else{

element['on'+type]=null;

}

},

};

 

var btn=document.getElementById('btn');

eventUtil.addHandler(btn,'click',function(){-----------------------------------这个一直执行

alert(this.value);  -----------------------这里还有一个问题,在IE9以下(不包括IE9),这里this.value为undefined?这是怎么回事啊

});

eventUtil.removeHandler(btn,'click',function(){-----------------------------------删除了,但是不起作用,还会执行addHandler

alert(this.value);

});


写回答 关注

1回答

  • rainforestYSLK
    2018-05-20 00:30:21
    已采纳

    你的后面的代码写的有bug ,将var btn=document.getElementById('btn');后面的代码

    修改为:

    function cons(event) {

    alert(event.type);

    }

    eventUtil.addHandler(btn, 'click', cons);

    //eventUtil.removeHandler(btn, 'click', cons);

    因为你删除句柄的时候要求参数和添加句柄时是一致的,包括第三个参数:函数,所以不能使用匿名函数。将这个函数封装起来就可以了,

    它传进去的是click这个事件本身,所以是没有值的,但是你可以把删除句柄的代码注释掉运行一下看这个事件的type.如上。


    qq_巧诈不...

    可以了,非常感谢!

    2018-05-20 22:21:19

    共 1 条回复 >

DOM事件探秘

DOM事件?本课程会通过实例来给小伙伴们讲解如何使用这些事件

99545 学习 · 1197 问题

查看课程

相似问题