javascript 事件处理 IE和标准dom 的差别

一个事件其实在页面上 有多个元素相应事件处理,点击页面上的一个button,会发生什么?其实 是相当于先后点击了按钮,它的容器,及这个页面.也就是说没一个元素都按照特定的顺序响应那个事件.事件的发生顺序在IE和mozilla在事件支持上的主要差别. 

事件流   冒泡技术.冒泡型事件的基本思想,事件按照从特定的事件目标开始到最不确定的事件目标.例如:   
<html>
        <head>
            test
        <head>
        <bodyοnclick="handle()">
            <div οnclick="handle1()">click</div>
        </body>
    </html>

IE5.5顺序是div  --body--document.
在IE6中div-body--html--document.
mozilla的顺序是div--body--html--html--document--window. 

还有另外一种技术:捕获型事件,它的执行顺序正好和冒泡技术相反,从document开始到div结束.

DOM事件流
 
     同时支持2种事件,但是捕获型事件先发生.2种事件流会触及DOM中的所有对象,从document开始,也在document结束.DOM事件流最独特的性质是,文本节点也会触发事件(在IE不会),所以如果点击click, dom事件是这样的:
  首先window--document--body--div--click.
  然后click--div--body--document--window.
所以一个事件处理函数在DOM浏览器中会执行2次.
给事件指定处理函数  的做法比较简单
 var obj = document.getElementById("id");
obj.οnclick=function(){}
或者直接在html标签里加οnclick="function-name"
这两种方式是在目前所有流行的浏览器种都可以使用.但是如何为每个事件分配多个处理函数呢?

IE的做法:
   在IE  中,每个元素和window对象都有2个方法:attachEvent()和detachEvent();attachEvent用来给一个事件附加事件处理函数. 而detachEvent用来将事件处理函数分离.每个方法都有2个参数:要分配的事件处理函数的名字(例如:onclick)和一个函数引用.
例如:
var fnClick=function(){alert("ss")}
var fnClick1=function(){alert("sss")}
var obj=document.getElementById("id")obj.attachEvent("onclick",fnClick);
obj.attachEvent("onclick",fnClick1);
obj.detachEvent("onclick",fnClick);
事件的执行顺序是按照添加的顺序执行的.

DOM方法
     dom中对应的方法是addEventListener()和removeEventListener ,这两个方法有3个参数,事件名称,要分配的函数和处理函数是用于冒泡阶段还是捕获阶段.如果事件处理函数是用在捕获阶段,第三个参数为true,冒泡阶段为false.用法和IE中的用法一样,不再多说了,就举一个例子吧:
var fnClick=function(){alert("ss")}
var fnClick1=function(){alert("sss")}
var obj=document.getElementById("id")obj.addEventListener("click",fnClick,false);
obj.addEventListener("click",fnClick1,false);
obj.removeEventListener("click",fnClick,false);

注意这里的是事件名称"click",不是要分配的事件处理函数的名字"onclick",自己体会一下吧.

如何获取事件对象:
   获取事件信息是很重要的事情,事件对象只在事件发生时被创建,而且只有在事件处理函数中可以访问,当所有的事件处理函数结束后,事件对象被销毁.
IE和DOM在获取事件对象上也是有差别的.
IE中,事件对象时window的一个属性event,也就是说必须在事件处理函数中这样访问:
obj.οnclick=function(){obj 1= window.event;}

尽管它是window的属性,event对象也是只能在事件发生时访问.DOM的准则说明,event对象必须座位唯一的参数传递给事件处理函数,所以在DOM浏览器中访问对象有两种方法:
1.obj.οnclick=function(){obj1=arguments[0]}
2.obj.οnclick=function(envent){}
事件的属性:介绍几个比较常用的IE:
altKey                              boolean                                         true 按下alt健button
                                         integer                                           0=未按键, 
                                                                                                 1=按下左键,
                                                                                                  2=右健,
                                                                                                  3=同时按左右,
                                                                                                  4=按下中键,
                                                                                                   5=左键+中键,
                                                                                                   6=右键+中键,
                                                                                                   7=三个健子一起按下cancelBuble          boolean                                                    设置成true 会停止事件向上冒泡.

fromElement        element                                                    鼠标事件中,鼠标所离开的元素.srcElement                                                                       引起事件的元素toElement                                                                             鼠标事件中,鼠标所进入的元素type                     string                                                          事件的名称.DOM中:bubbles               boolean                                                表示事件是否是否在冒泡阶段中cancelable           ''                                                               表示事件能否取消.
charCode                                                              按下健的unicode值,和IE的keyCode不一样currentTarget                                                            事件目前所指向的元素detail                   integer                                           鼠标点按钮被点击的次数eventPhase          integer                                           1=捕获阶段,2=在目标上,3=冒泡阶段isChar                 Boolean                                         表示按键是否时字符preventDefault       Function                                      调用这个方法可以终止事件的默认行为relatedTaget                                                              事件的第二个目标,经常用户鼠标事件.stopPropagation                                                      调用这个方法,组织事件将来事件的冒泡.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值