JavaScript之事件绑定
2016-11-11 00:00
10 查看
摘要: 事件流流到了哪里,哪里就触发相应的事件,如果触发事件的元素节点给触发事件绑定了动作,那么就会触发相应的动作了。
事件监听器和事件流有很大关系,可以说当一个元素上触发一个事件的时候,如果这个事件是支持捕获和冒泡的,如一个div元素触发了click事件,那么从document到这个div,再从这个div到document所有经过的元素都会触发click事件。而如果被触发click事件的元素绑定的触发click事件时发生的动作,那么就会执行相应的动作了。
这里主要说下给元素添加事件的事。给一个元素绑定事件主要有以下几种方法:
1. 直接把动作绑定到元素标识的属性上
2. 把动作绑定到元素对象属性上
第一种绑定方式和第二种绑定方式在给同一个元素绑定同一个事件动作的时候,第二种方式会覆盖第一种方式。
3. W3C DOM 级别2定义的事件绑定机制(addEventListener)。IE8.0及其以下版本不支持该方法,使用attachEvent()来绑定事件监听函数。
使用了第一种或者第二种方式给元素某个事件绑定动作,还可以使用第三种方式给该事件绑定动作,触发此事件的时候,该事件绑定的几个动作都会触发。使用第三种方式可以给元素某个事件绑定多个动作,而使用第一种或第二种方式只能绑定一个动作。
事件监听器和事件流有很大关系,可以说当一个元素上触发一个事件的时候,如果这个事件是支持捕获和冒泡的,如一个div元素触发了click事件,那么从document到这个div,再从这个div到document所有经过的元素都会触发click事件。而如果被触发click事件的元素绑定的触发click事件时发生的动作,那么就会执行相应的动作了。
这里主要说下给元素添加事件的事。给一个元素绑定事件主要有以下几种方法:
1. 直接把动作绑定到元素标识的属性上
//这种方式,一个元素一个事件只能绑定一个函数 <div onClick='alert(“hello world!”)'></div> <div onClick='clickFn(this)'></div> <div onClick='clickFn(1,2)'></div>
2. 把动作绑定到元素对象属性上
<div id='testDiv' onClick='alert("1")' onClick='alert("2")'></div> <script> var testDiv=document.getElementById('testDiv'); //将函数的引用赋值给元素对象的事件属性,这个函数也可以是匿名函数,这种方式一个元素一个事件只能绑定一个函数 testDiv.onclick=clickFn; function clickFn(){ alert('testDiv'); } </script> //当点击testDiv的时候回弹出 testDiv 。
第一种绑定方式和第二种绑定方式在给同一个元素绑定同一个事件动作的时候,第二种方式会覆盖第一种方式。
3. W3C DOM 级别2定义的事件绑定机制(addEventListener)。IE8.0及其以下版本不支持该方法,使用attachEvent()来绑定事件监听函数。
<div class="contener" id="contener" onclick='alert("1")' onclick="alert('2')"> <script> var EventListener = { add:function(element,type,func,captureFlag){ if(element.addEventListener){ EventListener.add=function(element,type,func,captureFlag){ captureFlag=captureFlag || false; element.addEventListener(type,func); } }else if(element.attachEvent){ EventListener.add=function(element,type,func,captureFlag){ element.attachEvent("on" + type,func); } }else{ EventListener.add=function(element,type,func,captureFlag){ element["on" + type] = func; } } EventListener.add(element,type,func,captureFlag); }, remove:function(element,type,func,captureFlag){ if(element.addEventListener){ EventListener.remove=function(element,type,func,captureFlag){ captureFlag=captureFlag || false; element.removeEventListener(type,func); } }else if(element.detachEvent){ EventListener.remove=function(element,type,func,captureFlag){ element.detachEvent("on" + type,func); } }else{ EventListener.remove=function(element,type,func,captureFlag){ element["on"+type] = null; } } EventListener.remove(element,type,func,captureFlag); } } var contener=document.getElementById('contener'); EventListener.add(contener,'click',Alert); function Alert(){ alert('hello world!'); } </script>
使用了第一种或者第二种方式给元素某个事件绑定动作,还可以使用第三种方式给该事件绑定动作,触发此事件的时候,该事件绑定的几个动作都会触发。使用第三种方式可以给元素某个事件绑定多个动作,而使用第一种或第二种方式只能绑定一个动作。
相关文章推荐
- Javascript 中的事件绑定
- 谈谈javascript事件绑定和Prototype的事件绑定
- Javascript利用闭包循环绑定事件
- JavaScript中绑定事件监听函数的通用方法 addEvent() [转]
- Javascript中的事件绑定
- DataGrid中绑定javascript事件,实现删除提示和变换背景色
- JavaScript事件绑定的方法说明
- Javascript循环绑定事件的示例代码
- Javascript循环绑定事件的示例代码
- javascript事件绑定后this变义问题的解决[prototype1.5.1]
- Javascript利用closure循环绑定事件
- 书:"Pro JavaScript Techniques 精通JavaScript"之绑定/移除事件监听函数
- [转]JAVASCRIPT绑定事件
- JavaScript:按钮事件动态绑定
- JavaScript事件绑定的方法说明
- javascript事件绑定后this变义问题的解决[prototype1.5.1]
- javascript事件的绑定
- vc++访问javascript(5)--绑定网页元素的事件
- JavaScript中为事件句柄绑定监听函数
- JavaScript绑定事件时的闭包问题