<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);
});
你的后面的代码写的有bug ,将var btn=document.getElementById('btn');后面的代码
修改为:
function cons(event) {
alert(event.type);
}
eventUtil.addHandler(btn, 'click', cons);
//eventUtil.removeHandler(btn, 'click', cons);
因为你删除句柄的时候要求参数和添加句柄时是一致的,包括第三个参数:函数,所以不能使用匿名函数。将这个函数封装起来就可以了,
它传进去的是click这个事件本身,所以是没有值的,但是你可以把删除句柄的代码注释掉运行一下看这个事件的type.如上。