添加事件及Event对象的兼容写法

简介: 一、事件流 事件流描述的是从页面中接受事件的顺序。 IE的事件流是事件冒泡流,而Netscape的事件流是事件捕获流 1、事件冒泡 事件冒泡,即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上转播至最不具体的节点(文档)。

 

一、事件流

事件流描述的是从页面中接受事件的顺序。

IE的事件流是事件冒泡流,而Netscape的事件流是事件捕获流

1、事件冒泡

事件冒泡,即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上转播至最不具体的节点(文档)。

2、事件捕获

事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件。

二、事件处理程序

1、HTML事件处理程序

2、DOM0级事件处理程序

3、DOM2级事件处理程序

DOM2级事件定义了两个方法:用于处理指定和删除事件处理程序的操作:addEventListener()和removeEventListener()。它们都接收三个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。

4、IE事件处理程序

attachEvent()添加事件

detachEvent()删除事件

这两个方法接收相同的两个参数:事件处理程序名称与事件处理函数

5、跨浏览器的事件处理程序

三、事件对象

事件对象event

1、DOM中的事件对象

(1)、type:获取事件类型

(2)、target:事件目标

(3)、stopPropagation() 阻止事件冒泡

(4)、preventDefault() 阻止事件的默认行为

2、IE中的事件对象

(1)、type:获取事件类型

(2)、srcElement:事件目标

(3)、cancelBubble=true阻止事件冒泡

(4)、returnValue=false阻止事件的默认行为

 

var eventUtil={

           // 添加兼容句柄

           addHandler:function(element,type,handler){

               if(element.addEventListener){

                 element.addEventListener(type,handler,false);

               }else if(element.attachEvent){

                 element.attachEvent('on'+type,handler);

               }else{

                 element['on'+type]=handler;

               }

           },

           // 删除兼容句柄

           removeHandler:function(element,type,handler){

               if(element.removeEventListener){

                 element.removeEventListener(type,handler,false);

               }else if(element.detachEvent){

                 element.detachEvent('on'+type,handler);

               }else{

                 element['on'+type]=null;

               }

           },

            // 获取兼容事件对象

          getEvent:function(event){

            return event?event:window.event;

          },

// 获取兼容的事件类型

          getType:function(event){

            return event.type;

          },

// 获取兼容事件源,既触发事件的元素(事件的目标节点)

          getElement:function(event){

            return event.target || event.srcElement;

          },

// 取消兼容默认事件

          preventDefault:function(event){

            if(event.preventDefault){

              event.preventDefault();

            }else{

              event.returnValue=false;

            }

          },

// 防止兼容冒泡

         stopPropagation:function(event){

           if(event.stopPropagation){

             event.stopPropagation();

           }else{

             event.cancelBubble=true;

           }

         }

  }

 

相关文章
|
弹性计算 人工智能 JSON
一键云部署:资源编排 ROS 轻松部署 LLM 应用开发平台 Dify
Dify是一款开源的LLM应用开发平台,融合BaaS和LLMOps理念,助力开发者快速构建生产级AI应用。阿里云的ROS提供IaC自动化部署服务,通过JSON/YAML/Terraform模板轻松部署Dify环境。以下是简化的部署步骤: 1. 登录ROS控制台的Dify部署页面。 2. 配置ECS实例参数。 3. 创建资源栈,完成部署后从输出获取Dify服务地址。 ROS模板定义了VPC、VSwitch、ECS实例等资源,通过ROS控制台创建资源栈实现自动化部署。这种方式高效、稳定,体现了IaC的最佳实践。
|
缓存 移动开发 资源调度
react-native 设置路径别名
没有设置路径别名之前代码是这样的: 路径相当冗长,看着就头疼。增加了路径别名之后,变成这样 心里清爽多了! 具体操作见下文,实操性强!
415 1
|
机器学习/深度学习 分布式计算 自然语言处理
【搜索引擎选型】Solr vs. Elasticsearch:选择开源搜索引擎
【搜索引擎选型】Solr vs. Elasticsearch:选择开源搜索引擎
|
JavaScript
vue实现搜索功能
vue实现搜索功能
170 0
|
安全 IDE Java
一文搞懂 Java 中的内存泄漏(Memory Leak)
Hello folks,在今天的这篇文章中,我将讨论 Java 虛擬機生态体系中的一个至为关键內容—— Memory Leak(内存泄漏)。
567 0
|
缓存 C# 网络架构
[解读REST] 3.基于网络应用的架构
链接上文[解读REST] 2.REST用来干什么的?,上文中解释到什么是架构风格和应该以怎样的视角来理解REST(Web的架构风格)。本篇来介绍一组自洽的术语,用它来描述和解释软件架构;以及列举下对于基于网络的应用来说,哪些点是需要我们重点关注的。
1513 0
|
2天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。