宝哥软件园

JavaScript事件机制的详细说明

编辑:宝哥软件园 来源:互联网 时间:2021-09-06

事件是连接JavaScript脚本和网页的主要方式,也是JavaScript中最重要的主题之一。深刻理解事件的工作机制及其对绩效的影响非常重要。本文将详细讨论JavaScript的事件机制,并对比分析浏览器之间的差异,包括事件流、事件处理程序绑定方式、事件对象等。

如何理解事件?

JavaScript和HTML之间的交互是通过事件来实现的。

事件:由用户或浏览器本身执行的动作,换句话说,文档或浏览器的某些特定交互时刻。

事件处理程序:也称为事件监听器,当事件发生时执行的代码段。

事件流:事件流描述从页面接收事件的顺序。

两个基本事件模型

事件冒泡:事件按照从最特定的事件目标到最不特定的事件目标(文档对象)的顺序触发。

事件捕获:事件从最不准确的对象(文档对象)触发,然后到最准确的对象。

IE9、Safari、Chrome、Opera、Firefox都开始从窗口对象捕捉并冒泡到窗口对象中

DOM事件流

同时支持两种基本的事件模型,规定事件流包括三个阶段:事件捕获阶段、目标阶段和事件冒泡阶段。

绑定DOM事件处理程序时,程序员可以选择在绑定事件时是使用事件捕获还是事件冒泡。

工业工程事件流

IE只支持事件冒泡,不支持事件捕捉。

事件处理程序绑定方法

DOM事件处理程序

DOM事件处理程序的属性名是“on”事件名,程序的作用域是元素的作用域,这个指向元素本身。

方法1:将函数值分配给事件处理程序属性。如下所示:

var BTN=document . getelementbyid(' myBtn ');Btn.onclick=function{ //特定代码段}注意:此方法中只能添加一个事件处理程序

方法2:通过addEventListener方法。以下:

AddEventListener('事件名称',事件处理程序,true/false :在事件捕获/冒泡阶段调用模型)

对应的事件处理程序移除方法:removeEventListener,参数必须相同。

注意:这样,匿名函数添加的事件处理程序就不能被移除

此方法可以添加多个事件处理程序

IE事件处理程序

Iooprea浏览器

程序范围是全局范围,这指向窗口对象

添加方法:attachEvent(在事件名称上,事件处理程序)

移除方法:分离事件(在事件名称上,事件处理程序)

事件对象

当一个事件被触发时,会生成一个相应的事件对象,该对象包含与该事件相关的所有信息。例如:导致事件的元素、事件的类型等。

DOM中的事件对象

对象名称:事件

常见属性:

类型:触发事件的类型

目标:事件的目标

常用方法:

Event.preventDefault:取消事件默认行为(前提:cancelable属性值为真)

事件停止传播:取消事件的进一步冒泡或捕获

工业工程中的事件对象

对象名称:窗口.事件

常见属性:

类型:触发事件的类型

ScrElement:事件的目标

常用方法:

事件。cancel buffer(true/false): true-取消事件的默认行为。返回值(真/假):假-取消事件的进一步冒泡或捕获

综上所述,整理代码,编写一个可以跨浏览器的事件处理程序(构造一个EventUtil对象,添加与每个浏览器兼容的事件处理方法),如下所示:

/*可跨浏览器的事件处理程序构造事件对象,为其添加可兼容各浏览器的事件处理方法*/var EventUtil={ /*添加事件处理程序*/addHandler:函数(元素、类型、处理程序){ if(元素。addEventListener){ addEventListener(类型、处理程序、假);} else if(元素。attachEvent){ attachEvent(' on ')类型,处理程序);} else { element[' on ' type]=handler;} }, /*移除事件处理程序*/removeHandler:函数(元素、类型、处理程序){ if(元素。removeEventListener){ removeEventListener(类型、处理程序,假);} else if(元素。独立通风口){独立通风口(' on '类型,处理程序);} else { type]上的元素['为null} },/*获得事件对象*/getEvent:函数(事件){退货事件?事件: window.event},/*获得事件的目标*/getTarget:函数(事件){返回事件。目标| |事件。screenelement}, /*取消事件的默认行为*/preventDefault:函数(事件){ if(event。preventdefault){ event。preventdefault} else { event.returValue=false} },/*阻止事件进一步冒泡*/停止传播:函数(事件){ if(event。stopper propagation){ event。停止宣传;} else { event . cancelubble=true } } };以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

更多资讯
游戏推荐
更多+