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

JS代理事件绑定

JS代理事件绑定

慕圣9424722 2017-10-15 20:21:37
<div id="div"> <a class="aa"  id="btn1" class="btn" href="www.baidu.com">1</a> <a class="aa" id="btn2" class="btn" href="www.baidu.com">2</a> <a class="aa" id="btn3" class="btn" href="www.baidu.com">3</a> <a class="aa"  id="btn4" class="btn"  href="www.baidu.com">4</a> </div> var div = document.getElementById('div') function bindEvent(elem,type,selector,fn){ if(fn == null){ fn = selector; selector = null; } elem.addEventListener(type,function(e){ var target = e.target; e.preventDefault() if(selector = null){ fn(e) }else{ if(target.matches(selector)){ fn.call(target,e) } } }) } bindevent(div, 'click', 'a', function(e) { alert(this.innerHTML) })                       //部分代码修改后             elem.addEventListener(type, function(e) {                var target = e.target;                e.preventDefault()       if(selector) {    if(target.matches(selector)) {  fn.call(target, e)   } } else { fn(e) } }) 如上代码,之前没有效果,后来只是将判断的顺序变了下,就好了,这是什么原因?求大神指点
查看完整描述

2 回答

已采纳
?
慕spring

TA贡献38条经验 获得超4个赞

selector = null   改为    selector == null


查看完整回答
反对 回复 2017-10-16
?
qq_莫非

TA贡献257条经验 获得超92个赞

因为代码的执行是有顺序的,你这个触发事件然后根据id查找执行代码,你前面没有出现过id为。。。的代码,就找不到,就不能执行,要把id绑定的事件放在后面才能有效果

getElementById,就是根据id查找,如果你id=“”的代码后于这个执行,他就找不到

查看完整回答
反对 回复 2017-10-16
  • 慕圣9424722
    慕圣9424722
    没看懂~ 即使不写var div = document.getElementById('div'),JS也可以获取ID元素,只是这样写一下更规范,浏览器兼容性更高, 可能正确答案就像楼上说的,少了个“=”~
  • 2 回答
  • 0 关注
  • 1932 浏览
慕课专栏
更多

添加回答

举报

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