事件

JavaScript事件流模型

  1. 事件捕获:事件有最不具体的元素接收,逐级向下传播,一直到最具体的节点元素(ie的兼容性不好,建议冒泡)。
  2. 事件冒泡:事件由最具体的节点元素接收,逐级向上传播,直到document文档对象。

DOM事件流的三个阶段:事件捕获--》目标阶段--》事件冒泡     IE9,Opera,Firebox,chrome,Safari;IE8以及更早版本不支持

注意:如果给一个事件绑定两个点击事件,一个用冒泡,一个用捕获,执行顺序为 非目标元素捕获>目标元素>非目标元素冒泡 

 

IE事件流:冒泡型

Netscape(网络信息浏览器):捕获型

 

阻止事件冒泡

if(ev.stopPropagation){

    ev.stopPropagation();

} else{

    ev.cancelBubble=true;//IE

}

阻止事件的默认行为

if(ev.preventDefault){

    ev.preventDefault();

} else{

    ev.returnValue=false;//IE  

}  

阻止冒泡和默认行为

 return false;

 

添加事件的方法

  1. 直接在html元素上添加οnclick="函数名()"; //HTML事件处理程序
  2. 在js中获取dom元素后添加onclick事件,dom元素.οnclick=function(){};  //DOM0级事件处理程序   dom元素=null移除
  3.  绑定事件 attachEvent()方法,支持ie;obj. attachEvent('onclick',menthod);   //IE事件处理程序 ie6-8
  4. 绑定事件  addEventListener()方法,支持事件冒泡和事件捕获,不兼容低版本 ie6-8

        DOM2级事件处理程序obj. addEventListener('click',method,false);  //默认false为冒泡,true为捕获

 注意:普通添加事件的方法不支持添加多个事件,后面的会覆盖前面的。而绑定事件的方式可以添加多个

              removeEventListener()可以移除绑定addEventListener()绑定的事件,条件是提供参数一致。。

              同样的,detachEvent()方法可以移除attachEvent()绑定的事件,条件也是提供参数一致。

  

事件对象

在触发DOM上的事件时,会产生一个事件对象event,对象中包含着事件的元素、类型、以及相关事件的方法等信息。

1.DOM中的事件对象

DOM0和DOM2中,都会传入event对象。HTML事件处理程序中,也会保存着event对象。

var btn=document.getElementById('myBtn'); 

    btn.onclick=function(event){

    alert('event.type');//click

}

event对象常见属性和方法有:

bubbles   事件是否可以冒泡

cancelable 是否可以取消事件的默认行为

detail  与事件相关的细节信息

currentTarget 某事件处理程序当前正在处理事件的那个元素

target   事件的目标

stopPropagation()   取消事件的进一步捕获或者冒泡(bubbles为true)

preventDefault()  取消事件的默认行为(cancelable 为true)

type  被触发事件的类型

事件处理程序内部,对象this一直等于currentTarget的值,而target只包含事件的实际目标。如果事件处理元素就是目标元素,那么三者的值一致。event.currentTarget==event.target==this

 

2.IE中的事件对象

如果是通过DOM0添加的事件处理程序,event作为window对象的一个属性存在。

var btn=document.getElementById('myBtn'); 

btn.onclick=function(){

    var event=window.event;

    alert('event.type');//click

}

如果是通过attachEvent()添加的,event对象会作为参数传入事件处理程序函数中。

var btn=document.getElementById('myBtn'); 

btn.attachEvent('onclick',function(event){

    alert('event.type');//click

});

event对象常见属性和方法有:

cancelBubble   为true时可以取消事件冒泡

returnValue   为false时可以取消事件的默认行为

srcElement     事件的目标(与DOM中target属性相同)

type    被触发事件的类型

 

DOM与IE事件流的不同总结:

1.绑定事件方法不同;

2.this指向不同,IE事件流中的this指向window对象,而DOM事件流中的this指向DOM对象;

3.执行顺序不一样,IE不按照注入顺序,而DOM事件流按注入顺序执行事件;

4.事件名不同,IE加on,DOM不加。

 

事件委托

定义:利用事件冒泡原理,让自己所触发的事件,由他的父元素来代替执行。

  1. 减少了监听事件的数量,比如很多ui li;
  2. 其次对于动态添加的元素,普通事件监听不到,利用事件委托可以由自动的事件响应处理。

注意:事件委托并不是直接处理事件,而是根据event.target得到了发生事件的子元素,让子元素调用事件回调函数。 

 

 

mouseenter  阻止事件冒泡传播

mouseover   事件冒泡传播

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值