JavaScript 笔记 —— 标准事件对象与 IE 事件对象

本文总结了标准事件对象和IE事件对象在获取事件目标、取消事件默认行为、禁止事件冒泡以及IE事件处理函数中this的使用等方面的区别。

标准的事件绑定函数是 addEventListener 函数,而 IE 浏览器(IE9 以下)则是用 attachEvent。 这两个函数中的事件处理函数都可以传入一个 event 参数,就是我们所说的事件对象,本文就来总结一下两者的区别。

获取事件的目标

事件的目标就是指当前触发事件的元素。

有如下的 HTML:

html<body id="myBody">
    <button id="myButton">click</button>
</body>

标准事件对象使用 eventtarget 属性获取事件目标。

javascriptvar btn = document.getElementById('myButton');
btn.addEventListener("click", function(event) {
    alert(event.target.id);    // myButton
});

IE 事件对象使用 eventsrcElement 属性获取事件目标。

javascriptvar btn = document.getElementById("myButton");
btn.attachEvent("onclick", function(event) {
    alert(event.srcElement.id);    // myButton
});

另外,标准事件对象还有一个 currentTarget 属性,该属性在事件处理函数当中始终与 this 相等,而 target 属性则是指向事件触发的具体目标。

javascriptdocument.body.addEventListener("click", function (event) {
    alert(event.currentTarget.id);    // myBody
    alert(event.target.id);           // myButton
    alert(this.id);                   // myBody
});

取消事件默认行为

有如下的 HTML:

html<body>
    <a id="myLink" href="http://www.acwong.org">acwong blog</a>
</body>

标准事件对象使用 eventpreventDefault() 方法取消事件默认行为。

javascriptvar myLink = document.getElementById('myLink');
myLink.addEventListener("click",function(event) {
    alert("haha");          // haha
    event.preventDefault(); // 浏览器不会跳转
});

IE 事件对象使用 eventreturnValue 属性取消事件默认行为,该属性默认值为 true 设置为 false 就可以取消事件默认行为。

javascriptvar myLink = document.getElementById('myLink');
myLink.attaxchEvent("onclick",function(event) {
    alert("haha");                  // haha
    event.returnValue = false;      // 浏览器不会跳转
});

禁止事件冒泡

有如下的 HTML:

html<body id="myBody">
    <button id="myButton">click</button>
</body>

标准事件对象使用 eventstopPropagation() 方法禁止事件冒泡。

javascriptvar btn = document.getElementById("myButton");
btn.addEventListener("click", function(event) {
    alert(this.id);            // myButton
    event.stopPropagation();   // 禁止事件冒泡
});
document.body.addEventListener("click",function(event) {
    alert(this.id);           // 不会出现
});

IE 事件对象使用 eventcancelBubble 属性禁止事件冒泡,该属性值默认为 false,设置为 true 就可以禁止事件冒泡。

javascriptvar btn = document.getElementById("myButton");
btn.attachEvent("onclick", function(event) {
    alert("haha");              // haha
    event.cancelBubble = true;  // 禁止事件冒泡
});
document.body.attachEvent("onclick",function(event) {
    alert("hehe");             // 不会出现
});

IE 事件处理函数中的 this

最后,还要一个与事件对象无关的小点,在 IE 事件处理函数当中 this 的值并不等于被绑定元素,而是等于 window 对象。

javascriptvar btn = document.getElementById("myButton");
btn.attachEvent("onclick", function(event) {
    alert(this === window);              // true
    alert(this.id)                       // undefined
});

而在标准事件绑定当中,this 的值等于被绑定的元素。

javascriptvar btn = document.getElementById("myButton");
btn.addEventListener("click", function(event) {
    alert(this === btn);                  // true
    alert(this.id);                       // myButton
    alert(this === event.currentTarget);  // true
});

最后祝大家新年快乐~

感谢您的阅读,有不足之处请为我指出。

参考

JavaScript高级程序设计(第3版)

本文同步于我的个人博客 http://www.acwong.org/2014/12/30/standard-event-object-and-IE-event-object/

内容概要:本文档是一份关于交换路由配置的学习笔记,系统地介绍了网络设备的远程管理、交换机路由器的核心配置技术。内容涵盖Telnet、SSH、Console三种远程控制方式的配置方法;详细讲解了VLAN划分原理及Access、Trunk、Hybrid端口的工作机制,以及端口镜像、端口汇聚、端口隔离等交换技术;深入解析了STP、MSTP、RSTP生成树协议的作用配置步骤;在路由部分,涵盖了IP地址配置、DHCP服务部署(接口池全局池)、NAT转换(静态动态)、静态路由、RIPOSPF动态路由协议的配置,并介绍了策略路由和ACL访问控制列表的应用;最后简要说明了华为防火墙的安全区域划分基本安全策略配置。; 适合人群:具备一定网络基础知识,从事网络工程、运维或相关技术岗位1-3年的技术人员,以及准备参加HCIA/CCNA等认证考试的学习者。; 使用场景及目标:①掌握企业网络中常见的交换路由配置技能,提升实际操作能力;②理解VLAN、STP、OSPF、NAT、ACL等核心技术原理并能独立完成中小型网络搭建调试;③通过命令示例熟悉华为设备CLI配置逻辑,为项目实施和故障排查提供参考。; 阅读建议:此笔记以实用配置为主,建议结合模拟器(如eNSP或Packet Tracer)动手实践每一条命令,对照拓扑理解数据流向,重点关注VLAN间通信、路由选择机制、安全策略控制等关键环节,并注意不同设备型号间的命令差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值