JS代理事件绑定

		<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)
				}
				})
				
				

如上代码,之前没有效果,后来只是将判断的顺序变了下,就好了,这是什么原因?求大神指点

慕圣9424722
浏览 1987回答 2
2回答

慕spring

selector = null   改为    selector == null

qq_莫非

因为代码的执行是有顺序的,你这个触发事件然后根据id查找执行代码,你前面没有出现过id为。。。的代码,就找不到,就不能执行,要把id绑定的事件放在后面才能有效果getElementById,就是根据id查找,如果你id=“”的代码后于这个执行,他就找不到
打开App,查看更多内容
随时随地看视频慕课网APP