DOM——事件、事件绑定、事件解绑

391 阅读2分钟

事件:

定义:元素在某种状态(浏览器实现的,也就是事件触发时)达成时,要执行的、提前设定好的程序,我们称之为事件句柄,是交互体验的核心功能。

交互有两种:鼠标、键盘。

组成的三要素:

事件源事件类型(例如:点击事件)事件处理程序(handler)

事件绑定:

事件绑定的方式:

1.行内绑定方式(可以绑定多个事件处理程序):在标签行内 的事件值上写上标志"javaScript:后跟js代码

image.png

image.png

2.元素属性绑定方式(只能绑定一个事件处理程序(handler)):

x.onxxx=function(事件){}

x:代表元素

xxx:代表触发的事件

image.png

3.给元素添加一个事件监听器(尽量使用这个绑定方式,同元素可以绑定多个处理程序,因为监听器与元素无关,只是被安装在元素上,它是使用自己的机制去监听页面哪个元素被点击了没有):

添加事件监听器:

x.addEventListener(参数1,参数2,参数3)

参数1(type):事件(例如:"click")

参数2(fn):函数

参数3(可选,默认是false):布尔值如果是true,代表在捕获阶段触发,如果是false,在捕获阶段不触发。这个参数表示是否在捕获阶段触发,与冒泡无关。

Event:事件

Listener:监听器

注意:这是一个异步非阻塞函数

image.png

image.png

4.了解(IE版本专有):

x.attachEvent(参数1,参数2)

参数1(on+type):事件(例如:"onclick")

参数2(fn):函数

兼容性写法:

x.adde=x.addEventListener||x.attachEvent

x.adde("onclick",function(){})

封装一个方法,实现原生JS兼容各类浏览器的元素事件绑定?

<script type="text/javascript">
			function addEvent(element,type,fn) {
			    if(element.addEventListener){
			        element.addEventListener(type,fn);//智能浏览器
			    }else if(element.attachEvent){
			        element.attachEvent('on'+type,function () {
			           fn.call(element);
			        })//IE版本专有
			    }else {
			        element['on'+type] = fn;//属性绑定
			    }
			}
			
	</script>

注意:3和4都是同元素多处理程序绑定方式

5.多元素同事件同处理程序绑定方式(代理模式):

原理:父元素绑定事件 通过事件对象来区分用户触发的事件属于哪一个具体的对象

x.onxxx=function(e){ e.target }

事件解绑:

1.行内、属性解绑:x.onxxx=false/null;

2.监听器解绑(移除对应的元素的对应的监听程序):

x.removeEventListener(type,fn,布尔值)

3.x.detachEvent(onxxx,fn)

注意:

 1.2中参数与x.addEventListener(参数1,参数2,参数3)中是一样的。
 
 2.如果23绑定的是匿名函数,则无法解除