事件:
定义:元素在某种状态(浏览器实现的,也就是事件触发时)达成时,要执行的、提前设定好的程序,我们称之为事件句柄,是交互体验的核心功能。
交互有两种:鼠标、键盘。
组成的三要素:
事件源、事件类型(例如:点击事件)、事件处理程序(handler)
事件绑定:
事件绑定的方式:
1.行内绑定方式(可以绑定多个事件处理程序):在标签行内 的事件值上写上标志"javaScript:后跟js代码
2.元素属性绑定方式(只能绑定一个事件处理程序(handler)):
x.onxxx=function(事件){}
x:代表元素
xxx:代表触发的事件
3.给元素添加一个事件监听器(尽量使用这个绑定方式,同元素可以绑定多个处理程序,因为监听器与元素无关,只是被安装在元素上,它是使用自己的机制去监听页面哪个元素被点击了没有):
添加事件监听器:
x.addEventListener(参数1,参数2,参数3)
参数1(type):事件(例如:"click")
参数2(fn):函数
参数3(可选,默认是false):布尔值如果是true,代表在捕获阶段触发,如果是false,在捕获阶段不触发。这个参数表示是否在捕获阶段触发,与冒泡无关。
Event:事件
Listener:监听器
注意:这是一个异步非阻塞函数
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.如果2、3绑定的是匿名函数,则无法解除