版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.5.1事件处理中的兼容性处理先来回顾一下事件处理中有哪些不同。标准事件模型和IE事件模型主要存在以下差异:◆事件传播机制不同——标准事件模型事件传播分为3个阶段:捕捉阶段、目标阶段和冒泡阶段,而IE模型事件传播只有冒泡一种形式。
◆事件对象不同——这里有两层含义,第一是事件对象的传递方式不同:标准事件模型中事件对象在事件发生时生成,并以参数的形式传递给事件处理函数;而IE模型中事件对象以全局对象event的形式出现,而不作为参数进行传递。第二是对象的属性和方法不同(见7.3.1节)。
◆事件注册和注销方式不同——标准事件模型用addEventListener()和removeEventListener()注册和注销事件处理函数,而IE模型的浏览器使用attachEvent()和detachEvent()注册和注销事件处理函数。首先介绍如何编写跨浏览器注册/注销事件的应用程序。1、跨浏览器注册/注销事件跨浏览器注册事件/注销事件首先要区分标准模型的浏览器还是IE浏览器。区分的方法:查看元素是否包含addEventListener属性或者attachEvent属性,如果包含addEventListener属性则为标准模型的浏览器,否则为IE浏览器。
◆若为标准模型的浏览器则调用addEventListener()注册事件处理函数;
◆若为IE浏览器则调用attachEvent()注册事件处理函数;
◆如果两者都不是,则使用添加元素事件处理属性的方式注册事件处理函数,这种方式可适应几乎100%的浏览器。清单7-1跨浏览器注册事件的函数functionaddEvent(elem,eventType,func){ if(elem.addEventListener){ elem.addEventListener(eventType,func,false); }elseif(elem.attachEvent){ elem.attachEvent("on"+eventType,func); }else{ elem["on"+eventType]=func; }}只要进行事件处理就需要用到这个事件注册函数,所以把它(addEvent())放到了随书源代码的js目录下的utils.js文件中,后面会经常用到这个函数。下面介绍跨浏览器注销事件的函数,方法与注册事件处理函数的方法类似。只不过这里是检查removeEventListener和detachEvent属性。
◆如果元素存在removeEventListener属性则调用removeEventListener()方法注销事件处理器(或者称为事件处理函数);
◆如果存在detachEvent属性则调用detachEvent()方法注销事件处理器;
◆如果两者都不能起作用,就采用将元素的事件处理属性("on"+事件类型的格式)置为空的办法注销事件处理程序。完整代码如清单7-2所示。清单7-2跨浏览器注销事件处理器的代码functionremoveEvent(elem,eventType,func){ if(elem.removeEventListener){ elem.removeEventListener(eventType,func,false); }elseif(elem.detachEvent){ elem.detachEvent("on"+eventType,func); }else{ elem["on"+eventType]=null; }}与addEvent()一样,这段代码也在随书源码的js文件夹中的utils.js文件中。这个utils.js文件将随着学习的不断深入添加更多的内容,学习完本书后大家可以添加一些其他的功能,并将它用在实际项目中。另外,这个addEvent()函数没有考虑在哪个阶段处理事件,也就是没有标准模型的useCapture参数,而是默认的把它置为了false,也就是默认在冒泡阶段处理事件。大家可以把这个addEvent()函数再添加一个参数,由用户指定在哪个阶段处理事件,这个作为练习留给读者来完成。2、事件对象兼容性处理
两种事件处理模型中事件对象的差异体现在事件对象的传递方式和事件对象自身的属性和方法上,想要编写兼容处理的程序,则必须兼顾这两方面的差异。现把两种对象的差异总结如下,如表7-6所示。表7-6标准事件对象与IE事件对象的属性和方法的差异属性/行为IE事件对象标准事件对象目标元素(事件源)srcElementtarget前一元素fromElementrelatedTarget后一元素toElementrelatedTarget取消冒泡cancelBubblestopPropagation()取消默认处理returnValuepreventDefault()事件对象的兼容性处理首先要处理事件对象的传递差异,标准模型中事件对象作为事件处理器(函数)的参数传递给事件处理函数,而IE模型的浏览器则把事件对象作为全局对象使用(见7.3节),所以获取事件对象的方式不同,这是首先要解决的问题。利用JavaScript逻辑或(||)运算的特性,可以采用以下方式统一两种对象获取方式:functioneventHandler(eventObj){ varevt=eventObj||window.event; //evt即获取到的事件对象}JavaScript的逻辑或运算符比较特殊,eventObj和window.event哪一个存在(即为真)则返回哪个对象,而不是仅仅返回一个布尔值。通过这一性质可以把两种对象传递方式统一起来。获取事件对象之后,就是要处理表7-6中的这些不同的属性和方法了。有了上面的处理事件对象传递不同的经验,你可能马上就会想到仍然使用JavaScript的逻辑与的特性,下面给出处理这些差异的代码。如清单7-3所示。这里需要说明的是,stopPropagation()和preventDefault()两个函数名也可以用作事件对象的属性(名)。并不是所有的这些差异都需要同时处理,实际应用中根据需要截取相应的代码即可!7.5.2事件处理中参数的传递问题事件处理器(函数)只能接收一个参数,那就是事件对象。如果需要传递其他额外的参数该怎么办呢?这是一个比较实际的问题,往往在处理发生的事件时,需要其他的参数,这时就不可避免的遇到这个问题。对于这个问题通用的做法是注册事件时使用匿名函数,然后在这个注册的匿名函数中调用带有其他参数的函数来处理这一事件。这样说起来比较抽象,来看个例子就明白了,这个方法就是下面的方法一。为了说明这一问题,使用这样一个例子。实例中允许用户在网页中输入两个数值,单击“=”按钮时,计算这两个数值的积。实现这样的功能有许多方法,下面给出两种方法,并对两种方法进行对比分析,指出其中的优缺点。方法一:在事件处理中传递参数在这一做法中,首先声明一个用于实现乘法的函数multi,然后在事件处理器中获取用户输入的值,再调用multi函数计算两个值的积,最后输出计算结果。具体代码如清单7-4所示。代码说明如下图(1、匿名事件处理函数;(2)在匿名事件处理器中以调用函数的方式传递额外参数。):方法二:直接在事件处理器中计算
这种方法和上一个方法类似,只不过是把调用multi()函数计算结果修改成直接计算结果,代码如清单7-5所示。只给出与清单7-4所示代码不同的部分。清单7-5直接在事件处理器中计算乘积addEvent(document.getElementById('multi'), 'click', function(){varsummand=document.getElementsByName('summand')[0].value; varaddend=document.getElementsByName('addend')[0].value; varresult=summand*addend;//直接计算两数的乘积,而不是调用multi函数 alert(summand+'*'+addend+"="+result); });两者比较同样可以得到相同的结果,方法二没有方法一的函数调用,执行速度
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 总工施工方案编制(3篇)
- 施工方案-顶管(3篇)
- 大型剪发活动方案策划(3篇)
- 小班秋游活动策划方案(3篇)
- 企业采购与招标投标手册(标准版)
- 2025年大学车辆工程(汽车法规)试题及答案
- 2025年大学大三(酒店管理)酒店餐饮管理试题及答案
- 2025年中职(烹饪工艺与营养)冷菜制作综合测试题及答案
- 2025年高职种子科学与工程(种子科学与工程)试题及答案
- 2025年大学短视频应用(应用技术)试题及答案
- 华师 八下 数学 第18章 平行四边形《平行四边形的判定(2)》课件
- 新教科版小学1-6年级科学需做实验目录
- GB/T 18457-2024制造医疗器械用不锈钢针管要求和试验方法
- 电信营业厅运营方案策划书(2篇)
- 手机维修单完整版本
- 流感防治知识培训
- 呼吸内科进修汇报课件
- 康复治疗进修汇报
- 牵引供电系统短路计算-三相对称短路计算(高铁牵引供电系统)
- 离婚协议书模板(模板)(通用)
- (完整版)第一性原理
评论
0/150
提交评论