为了账号安全,请及时绑定邮箱和手机立即绑定

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

<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 回答

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

修改为:

function cons(event) {

alert(event.type);

}

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

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

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

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


1 回复 有任何疑惑可以回复我~
#1

qq_巧诈不如绌诚_0 提问者

可以了,非常感谢!
2018-05-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信