JS在IE和FF下attachEvent,addEventListener学习笔记
### JavaScript中的事件处理:attachEvent与addEventListener #### 一、引言 JavaScript 是一种广泛使用的脚本语言,它被用于实现网页的动态效果和交互功能。随着 Web 技术的发展,浏览器之间的差异也逐渐显现出来,尤其是在处理用户事件时。在不同的浏览器中,JavaScript 处理事件的方式有所不同。本文将探讨在 Internet Explorer (IE) 和 Firefox (FF) 浏览器中处理事件的方法,特别关注 `attachEvent` 和 `addEventListener` 的使用。 #### 二、事件处理概述 在 JavaScript 中,事件是指由用户或浏览器引发的动作,例如点击按钮、滚动页面等。为了响应这些事件,开发者可以通过绑定事件处理器来定义相应的动作。事件处理机制在现代 Web 开发中至关重要,因为它们直接影响到用户的交互体验。 #### 三、事件处理方法 在 JavaScript 中,有两种常见的绑定事件处理器的方法:`addEventListener` 和 `attachEvent`。这两种方法的主要区别在于它们对不同浏览器的支持情况。 ##### 3.1 addEventListener 在非 IE 浏览器中,如 Firefox,通常使用 `addEventListener` 方法来绑定事件处理器。此方法的语法如下: ```javascript 对象名.addEventListener("事件名(不带ON)", 函数名, true/false); ``` 其中,“事件名”指的是触发事件的名称,例如 `"click"`、`"blur"` 等,注意这里不带前缀 `"on"`。第二个参数是一个回调函数,当对应的事件发生时会被调用。第三个参数是一个布尔值,表示事件捕获/冒泡的顺序: - 如果该参数为 `true`,则事件捕获阶段会先于事件冒泡阶段触发该事件处理器。 - 如果该参数为 `false`,则事件冒泡阶段会先于事件捕获阶段触发该事件处理器。 **示例代码**: ```javascript window.onload = function() { document.getElementById("div_test").addEventListener("click", test1, false); document.getElementById("btn_test").addEventListener("click", test2, false); } function test1() { alert("外层div触发"); } function test2() { alert("内层input触发"); } ``` 在这个例子中,如果将第三个参数设置为 `true`,则当点击按钮时,`test1` 函数将先于 `test2` 被调用;反之,则 `test2` 先于 `test1` 被调用。 ##### 3.2 attachEvent 对于 Internet Explorer 浏览器,通常使用 `attachEvent` 方法来绑定事件处理器。此方法的语法如下: ```javascript 对象名.attachEvent("事件名", 函数名); ``` 这里的“事件名”同样是指触发事件的名称,但与 `addEventListener` 不同的是,在 IE 中需要带上 `"on"` 前缀,如 `"onclick"`、`"onblur"` 等。第二个参数是一个回调函数,当对应的事件发生时会被调用。 **示例代码**: ```javascript if (typeof document.addEventListener != "undefined") { document.addEventListener("mousedown", _lhlclick, true); } else { document.attachEvent("onmousedown", _lhlclick); } ``` #### 四、事件解绑 在某些情况下,可能需要解除已绑定的事件处理器。这可以通过以下方法实现: ##### 4.1 removeEventListener 对于非 IE 浏览器,可以使用 `removeEventListener` 方法来解除事件处理器: ```javascript if (typeof document.addEventListener != "undefined") { document.removeEventListener("mousedown", _lhlclick, true); } ``` ##### 4.2 detachEvent 对于 IE 浏览器,可以使用 `detachEvent` 方法来解除事件处理器: ```javascript else { document.detachEvent("onmousedown", _lhlclick); } ``` #### 五、总结 通过本文的学习,我们了解了在不同的浏览器中处理事件的基本方法。`addEventListener` 和 `attachEvent` 分别适用于非 IE 和 IE 浏览器,它们之间的主要区别在于参数的要求以及是否支持事件捕获/冒泡的控制。在实际开发过程中,根据目标浏览器的特性选择合适的方法是非常重要的,这样可以确保代码的兼容性和稳定性。 #### 六、参考资料 - [MDN Web 文档 - EventTarget.addEventListener](https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener) - [MDN Web 文档 - Element.attachEvent](https://developer.mozilla.org/zh-CN/docs/Web/API/Element/attachEvent)
- 粉丝: 2
- 资源: 920
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于二阶自抗扰ADRC的轨迹跟踪控制,对车辆的不确定性和外界干扰具有一定抗干扰性,基于carsim和simulink仿真 跟踪轨迹为双移线,效果良好,有对应复现资料,是学习自抗扰技术快速入门很好的资料
- 基于python的网页自动化工具项目全套技术资料100%好用.zip
- MATLAB【逆变器二次调频模型】 微电网分布式电源逆变器DROOP控制二次调频模型,加入二次控制实现二次调频控制,及二次调压控制,程序可实现上图功能,工况有所改变 需要matlab2021A版
- 抢购软件:快速复制信息
- 单机无穷大系统发生各类(三相短路,单相接地,两相接地,两相相间短路)等短路故障,各类(单相断线,两相断线,三相断线)等断线故障,暂态稳定仿真分析
- 微信文章爬虫项目全套技术资料100%好用.zip
- 基于动态窗口算法的AGV仿真避障 可设置起点目标点,设置地图,设置移动障碍物起始点目标点,未知静态障碍物 动态窗口方法(DynamicWindowApproach) 是一种可以实现实时避障的局部规划算
- Power Quality Disturbance:基于MATLAB Simulink的各种电能质量扰动仿真模型,包括配电线路故障、感应电机启动、变压器励磁、单相 三相非线性负载等模型,可用于模拟各种
- 数据爬虫项目全套技术资料100%好用.zip
- 聊天系统项目全套技术资料100%好用.zip