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

为什么我还没有调用removehandler,它就已经生效了?我只有在把这一大段注释掉的时候,其他代码才有效。

为什么我还没有调用removehandler,它就已经生效了?我只有在把这一大段注释掉的时候,其他代码才有效。

袁民成 2016-03-21 20:06:33
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>DOM事件流</title> </head> <body> <div id="box"> <input type="button" value="按钮1" id="btn1" onclick="showMessage()"> <input type="button" value="按钮2" id="btn2"> <input type="button" value="按钮3" id="btn3"> </div> <script > //以下是定义showMes函数:后面可以调用,btn1也可直接调用(HTML事件处理程序,缺点在于js和html的函数名必须随时保证一致,修改起来太麻烦)。 function showMessage(){ alert("Hello world!"); } //以下是通过DOM0级的方式为按钮2添加事件(缺点在于只能添加一个事件)。 var btn2 = document.getElementById("btn2");    btn2.onclick=function(){     alert("这是通过DOM0级添加的事件");    }    //btn2.onclick=null//删除这一事件(要生效请取消本行代码前的注释符) //以下是通过DOM2级方式为按钮3添加事件(包含跨浏览器兼容处理方式) var btn3 = document.getElementById("btn3");    //此处开始通过能力检测的方式,解决跨浏览器兼容问题    var eventUtil=    {     //添加句柄     addHandler:function(element/*给谁添加*/,type/*添加什么动作*/,handler/*添加后有什么效果*/)     {     //以下是针对支持DOM2级的浏览器     if(element.addEventListener/*如果你支持element的addEventListener*/){     element.addEventListener(type/*在DOM2级中所有动作的“on”前缀都要去掉,如onclick/onmouseover等,所以此处的type参数使用的是click,而不是onclick*/,handler/*触发handler的操作*/,false/*事件冒泡流布尔值*/);     }     //以下是针对IE浏览器     else if(element.attachEvent/*如果你支持element的attachEvent*/){     element.attachEvent("on"+type/*在IE中要使用“on”的前缀,所以这里要加上字符串“on”*/,handler/*触发handler的操作*/);     }     //以下是针对不支持DOM2级和IE的老版本浏览器,则使用DOM0级来添加     else{     element["on"+type]/*注释1:关于中括号---element.onclick=element["onclick"];注释2:关于“‘on’+type”---此处在调用type参数,但是缺少"on",而函数element后面不能通过点或者加号来直接连接字符串,所以使用率中括号*/=handler/*触发handler的操作*/;     }     }     //删除句柄(也即删除事件)     removeHandler:function(element/*给谁添加*/,type/*添加什么动作*/,handler/*添加后有什么效果*/)     {     //以下是针对支持DOM2级的浏览器     if(element.removeEventListener/*如果你支持element的removeEventListener*/){     element.removeEventListener(type/*在DOM2级中所有动作的“on”前缀都要去掉,如onclick/onmouseover等,所以此处的type参数使用的是click,而不是onclick*/,handler/*触发handler的操作*/,false/*事件冒泡流布尔值*/);     }     //以下是针对IE浏览器     else if(element.detachEvent/*如果你支持element的detachEvent*/){     element.detachEvent("on"+type/*在IE中要使用“on”的前缀,所以这里要加上字符串“on”*/,handler/*触发handler的操作*/);     }     //以下是针对不支持DOM2级和IE的老版本浏览器,则使用DOM0级来添加     else{     element["on"+type]/*注释1:关于中括号---element.onclick=element["onclick"];注释2:关于“‘on’+type”---此处在调用type参数,但是缺少"on",而函数element后面不能通过点或者加号来直接连接字符串,所以使用率中括号*/=null/*使它的值为空,也即删除该事件功能*/;     }      }    }    //跨浏览器事件处理程序代码完毕(删除句柄的代码块被注释,如需生效,请接触注释)    eventUtil.addHandler(btn3,"click",showMessage);    //eventUtil.removeHandler(btn3,"click",showMessage); </script> </body> </html>
查看完整描述

1 回答

?
袁民成

TA贡献1条经验 获得超1个赞

马德志·张,我找到问题了,第49行少打了个逗号,眼睛都找瞎了。。。。。

查看完整回答
1 反对 回复 2016-03-21
  • 1 回答
  • 0 关注
  • 1451 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信