JavaScript——DOM Level0和DOM Level2事件模型

事件处理是JavaScropt中近几年变化最大的部分,也是现有浏览器中仍然存在差异的主要方面之一。为了开发出能够跨浏览器兼容的事件处理程序,我们在编写程序时需要注意一些细节。

【DOM Level0】:又称传统事件处理——通过对象属性将一个函数值指定为事件处理程序的做法。也就是将要添加的事件处理程序直接赋给该对象的事件处理程序属性。任何对象只允许指定一个事件处理程序。DOM Level0时间分成两种阵营:NetScape(Firefox,Mozilla,Opera,Safari)和IE阵营,为了获得这两种类型浏览器都能兼容的网页时,需要注意以下对象以及对应的几个属性。

*Event对象——可以用来提供Event相关信息的属性

IE中将Event视作window对象属性,NetScape直接看做Event对象;用三元运算符来判断某个Event对象nsEvent是否已定义。

处理浏览器兼容方法:var theEvent=nsEvent ? nsEvent : window.event;

*Event的fromElement和relatedTarget属性(分别属于IE和Firefox)——通过鼠标事件获取鼠标从哪个对象移开(类似的还有aretoElement和currentTarget属性,用来获取鼠标移动到哪个对象)

处理浏览器兼容方法:var oldElement=theEvent.fromElement ? theEvent.fromElement : theEvent.relatedTarget;

*IE中的srcElement和Mozilla浏览器中的target属性——用来表示接收事件的对象

处理浏览器兼容方法:var theSrc=theEvent.target ? theEvent.target : theEvent.srcElement;

*IE中的cancelBubble和Mozilla之类的stopPropagation——则用于处理事件冒泡操作的关于浏览器兼容性的属性

处理浏览器兼容方法:fiunction stopEvent(theEvent)

{

if(theEvent.stopPropagation)

{

theEvent.stopPropagation();

}

else

{

theEvent.cancelBubble=true;

}

}

【DOM Level2】与老事件模型DOM Level0的主要区别在:1.新模型不依赖于特定的事件处理程序属性。2.可以对任何对象的任何一种事件注册多个事件处理程序函数。这里处理浏览器兼容性问题的主要来自:Mozilla之类的浏览器支持的三种对象方法:addEventListener,removeEventListener和dispatchEvent与IE浏览器支持的对象方法:attachEvent和detachEvent之间的区别。

*Mozilla类浏览器中添加一个事件监听器,其他类似

object.addEventListener("event",eventFunction,boolean);

参数一:click和load之类事件;参数二:指定的事件处理程序函数;参数三:指定事件捕获模型(true)和冒泡模型(false)。

*IE浏览器中添加一个事件监听器:

object.attachEvent("eventhandler",function);

参数一:事件处理程序;参数二:函数。

为了兼容上述的差异的处理方法:

function setup(theEvent)

{

var evtObject=document.getElementById("clickme");

if(evtObject.addEventListener){                                         //测试对象模型

evtObject.addEventListener("click",clickme,false);} 

else if(evtObject.attachEvent){

evtObject.attachEvent("onclick",clickme);}

else if(evtObject.onclick){

evtObject.οnclick=clickme;}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值