问答详情
源自:2-4 IE事件处理程序及跨浏览器解决

为什么删除function()没作用???问题在文中最后面有注释的地方,求解!

var eventUtil = {

//添加句柄

addHandler:function(element, type, handler) {

if(element.addEventListener) {

element.addEventListener(type, handler, false);   //如果支持DOM2级

}

else if(element.attachEvent) {

element.attachEvent('on'+type, handler);    //支持IE

}

else {

element['on'+type] = handler;             //DOM0级

}

},

//删除句柄

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;             

}

}

}

//调用封装好的对象

eventUtil.addHandler(btn1, 'click', showMe);

eventUtil.removeHandler(btn1, 'click', showMe);

eventUtil.addHandler(btn2, 'click', function(){alert('我是' + this.value)});

eventUtil.removeHandler(btn2, 'click', function(){alert('我是' + this.value)});//这个没反应???


提问者:木易涛童鞋 2016-06-07 18:33

个回答

  • 佐佑918
    2016-06-07 21:37:29
    已采纳

    因为,removeEventListener()移除时传入的参数与添加处理程序时使用的参数相同。匿名函数无法移除。

    element, type, handler,这三个参数,element:要在该元素上清除事件.type:事件类型.是键盘事件或是鼠标事件,handler:事件名称.函数的名称。

    function Alert(){alert('我是' + this.value)}

    eventUtil.addHandler(btn2, 'click', Alert); //添加

    eventUtil.removeHandler(btn2, 'click', Alert);  //删除