javascript中的事件捕获机制,深入理解并区别IE和DOM中的事件模型



     1.什么是事件冒泡?


在排序算法中,我们学过冒泡排序法,所谓冒泡就是让底层的东西浮出水面,对于事件冒泡也同样是如此,

下面我们来看一个例子来说明什么是事件冒泡。


<div>

   <button>测试</button>

</div>

<script>

   $("div").bind("click",function(){alert("div")});

   $("button").bind("click",function(){alert("button"});

</script>

当支持事件冒泡时,当我们点击"测试”按钮时,首先会执行的是alert("button"),固名思意:

事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。

当div,button,html根元素都有事件时,事件执行的顺序为:

button->div->html



         2.什么是事件捕获?


我们再来看事件捕获,相对于事件捕获,处理时间的顺序与事件冒泡截然相反,同样:

<div>

   <button>测试</button>

</div>

<script>

   $("div").bind("click",function(){alert("div")});

   $("button").bind("click",function(){alert("button"});

</script>

执行这段代码,首先会alert("div"),其次会alert("button")。我们明确事件捕获的概念:

事件从最不精确的对象(document 对象)开始触发,然后到最精确。

同样的如果button,div,html元素上都有绑定事件,那么事件的实行顺序为:

html->div->button


   3.各个版本的浏览器对事件的处理机制?

    (1)在DOM中,即支持事件冒泡,也支持事件捕获,在W3C的标准中,认为任何

事件都是从事件捕获出发,找到最终的结点,此后再进行冒泡,会到根结点。

DOM中支持事件绑定的函数为:addEventListener("事件名",函数,userCapture);

对于userCapture参数,默认为false,支持事件冒泡。

若在userCapture参数,为true时,支持事件捕获。

    (2)对于很多浏览器,都支持addEventListener方法,但是IE不支持!

      (3) IE中的事件处理机制,IE中只支持事件冒泡,IE中有一个独有的事件绑定方法

attachEvent方法,此方法有两个参数,attachEvent("事件名","函数名")

     

    4.如何阻止事件的传播?


    无论是事件冒泡还是事件捕获都是可以阻止的。

   (1)首先在W3C中阻止事件的传播方法为:stopPropagation(),在IE中,通过设置cancelBubble=true;

     (2) 如何阻止事件的默认行为?在W3C标准中,使用preventDefault方法,在IE中通过设置

      window.event.returnValue = false;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值