使用removeHandler句柄時(shí)沒反應(yīng),沒有刪除事件程序
<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(){-----------------------------------這個(gè)一直執(zhí)行
alert(this.value);? -----------------------這里還有一個(gè)問題,在IE9以下(不包括IE9),這里this.value為undefined?這是怎么回事啊
});
eventUtil.removeHandler(btn,'click',function(){-----------------------------------刪除了,但是不起作用,還會執(zhí)行addHandler
alert(this.value);
});
2018-05-20
你的后面的代碼寫的有bug ,將var btn=document.getElementById('btn');后面的代碼
修改為:
function cons(event) {
alert(event.type);
}
eventUtil.addHandler(btn, 'click', cons);
//eventUtil.removeHandler(btn, 'click', cons);
因?yàn)槟銊h除句柄的時(shí)候要求參數(shù)和添加句柄時(shí)是一致的,包括第三個(gè)參數(shù):函數(shù),所以不能使用匿名函數(shù)。將這個(gè)函數(shù)封裝起來就可以了,
它傳進(jìn)去的是click這個(gè)事件本身,所以是沒有值的,但是你可以把刪除句柄的代碼注釋掉運(yùn)行一下看這個(gè)事件的type.如上。