javascript从入门到精通光盘资源第9章dom模型_第1页
javascript从入门到精通光盘资源第9章dom模型_第2页
javascript从入门到精通光盘资源第9章dom模型_第3页
javascript从入门到精通光盘资源第9章dom模型_第4页
javascript从入门到精通光盘资源第9章dom模型_第5页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DOM事件模型

本讲大纲:1、事件流

支持网站:2、主流浏览器的事件模型3、事件对象4、注册与移除事件监听器事件流 DOM(文档对象模型)结构是一个树型结构,当一个HTML元素产生一个事件时,该事件会在元素结点与根结点之间的路径传播,路径所经过的结点都会收到该事件,这个传播过程可称为DOM事件流。

主流浏览器的事件模型 直到DOMLevel3中规定后,多数主流浏览器才陆陆续续支持DOM标准的事件处理模型——捕获型与冒泡型。 目前除IE浏览器外,其它主流的Firefox,Opera,Safari都支持标准的DOM事件处理模型。IE仍然使用自己的模型,即冒泡型,它模型的一部份被DOM采用,这点对于开发者来说也是有好处的,只使用DOM标准,IE都共有的事件处理方式才能有效的跨浏览器。 冒泡型事件(Bubbling):从DOM树型结构上理解,就是事件由叶子结点沿祖先结点一直向上传递直到根结点;从浏览器界面视图HTML元素排列层次上理解就是事件由具有从属关系的最确定的目标元素一直传递到最不确定的目标元素。 捕获型事件(Capturing):NetscapeNavigator的实现,它与冒泡型刚好相反,由DOM树最顶层元素一直到最精确的元素。 DOM标准事件模型:因为两个不同的模型都有其优点和解释,DOM标准支持捕获型与冒泡型,可以说是它们两者的结合体。它可以在一个DOM元素上绑定多个事件处理器,并且在处理函数内部,this关键字仍然指向被绑定的DOM元素,另外处理函数参数列表的第一个位置传递事件event对象。 首先是捕获式传递事件,接着是冒泡式传递,所以,如果一个处理函数既注册了捕获型事件的监听,又注册冒泡型事件监听,那么在DOM事件模型中它就会被调用两次。事件对象 在IE浏览器中事件对象是window对象的一个属性event,并且event对象只能在事件发生时候被访问,所有事件处理完后,该对象就消失了。而标准的DOM中规定event必须作为惟一的参数传给事件处理函数。故为了实现兼容性,通常采用下面的方法:functionsomeHandle(event){if(window.event)event=window.event;} 说明: 在两种浏览器处理事件中,type属性是各种浏览器所兼容的,他表示获取的事件类型,返回字符串。 在检测Shift,Alt,Ctrl三个键时,两种浏览器事件使用的方法也是一样的。 在IE中,事件的对象包含在event的srcElement属性中,而在标准的DOM浏览器中,对象包含在target属性中。 为了处理两种浏览器兼容性,举例如下:functionhandle(oEvent){if(window.event)oEvent=window.event;

//处理兼容性,获得事件对象varoTarget;if(oEvent.srcElement)

//处理兼容性,获取事件目标oTarget=oEvent.srcElement;elseoTarget=oEvent.target;alert(oTarget.tagName);

//弹出目标的标记名称}window.onload=function(){varoImg=document.getElementsByTagName(“img”)[0];oImg.onclick=handle;}注册与移除事件监听器 1,IE下注册多个事件监听器与移除监听器方法 E浏览器中HTML元素有个attachEvent方法允许外界注册该元素多个事件监听器,例如:element.attachEvent(‘onclick’,observer); 要移除先前注册的事件的监听器,调用element的detachEvent方法即可,参数相同,例如:element.detachEvent(‘onclick’,observer); 2,DOM标准下注册多个事件监听器与移除监听器方法 实现DOM标准的浏览器与IE浏览器中注册元素事件监听器方式有所不同,它通过元素的addEventListener方法注册,该方法既支持注册冒泡型事件处理,又支持捕获型事件处理。 element.addEventListener(‘click’,observer,useCapture); addEventListener方法接受三个参数。第一个参数是事件名称,值得注意的是,这里事件名称与IE的不同,事件名称是没‘on’开头的;第二个参数observer是回调处理函数;第三个参数注明该处理回调函数是在事件传递过程中的捕获阶段被调用还是冒泡阶段被调用,默认true为捕获阶段。 移除已注册的事件监听器调用element的removeEventListener即可,参数不变。 element.removeEventListener(‘click’,observer,useCapture);注册与移除事件监听器

3、直接在DOM节点上加事件 (1)如何取消浏览器事件的传递与事件传递后浏览器的默认处理 取消事件传递是指,停止捕获型事件或冒泡型事件的进一步传递。例如上图中的冒泡型事件传递中,在body处理停止事件传递后,位于上层的document的事件监听器就不再收到通知,不再被处理。 事件传递后的默认处理是指,通常浏览器在事件传递并处理完后会执行与该事件关联的默认动作(如果存在这样的动作)。 (2)取消浏览器的事件传递: 在IE下,通过设置event对象的cancelBubble为true即可。functionsomeHandle(){window.event.cancelBubble=true;} DOM标准通过调用event对象的stopPropagation()方法即可。functionsomeHandle(event){event.stopPropagation();} 因些,跨浏览器的停止事件传递的方法是:functionsomeHandle(event){event=event||window.event;if(event.stopPropagation)event.stopPropagation();elseevent.cancelBubble=true;}注册与移除事件监听器(3)取消事件传递后的默认处理在IE下,通过设置event对象的returnValue为false即可。functionsomeHandle(){window.event.returnValue=false;}DOM标准通过调用event对象的preventDefault()方法即可。functionsomeHandle(event){event.preventDefault();}因些,跨浏览器的取消事件传递后的默认处理方法是:functionsome

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论