js中事件对象event的兼容性问题
W3C标准规定,事件是作为函数的参数传入的,例如:
<p id="demo">点击我将获得屏幕坐标</p>
document.getElementById("demo").onclick=function(e){alert(e.screenX);
}
当在元素上点击时,弹出警告框,内容为鼠标在屏幕上的横坐标。这里函数传入的参数e,就是事件,浏览器会实时跟踪用户的行为,如e.screenX、e.screenY、e.offsetX、e.offsetY…
这种做法在FireFox、Chrome、Safari等遵循W3C规范的浏览器下是没有问题的,唯独在IE下是行不通的,
IE采用了一种非标准的方式,将事件作为window对象的event属性:window.event、window.event.screenX…
所以,我们在写代码的时候要照顾到IE,做好事件的兼容。
下面给出的一个兼容写法,该示例并没有去判断浏览器,仅仅使用了一个小技巧。
<p id="demo">点击我将获得屏幕坐标</p>
document.getElementById("demo").onclick=function(e){var e=e||event;alert(e.screenX);
}
注意:不要将var e=e||event; 写成 var e=event||e; ,这在FireFox下会提示错误,FireFox无法处理未声明未赋值的变量event。
这里大家可能有疑虑,为什么是var e=e||event; ,为什么是 或运算(||),这样的结果只能是e=true或者e=false?
或运算(||)返回的并不只是true或者false,而是返回第一个不为false的变量的值,例如:
var a=5||6; //a=5
var b=0||5; //b=5
var c=false||”www.itxueyuan.com”; //c=”www.itxueyuan.com”
var e=e||event; //e为用户事件
与运算(&&)返回第一个不为true的变量的值;
在处理浏览器兼容问题的时候,尽量不要去判断浏览器,那将会为向后兼容带来风险,或许某个升级的版本开始遵循W3C标准,我们之前写的代码在该版本上就会产生错误,得不到预想结果。
例如,某个升级的IE版本支持将事件作为函数参数传入,抛弃了将事件作为window的属性,而我们的代码,恰恰是这个样子的:
if((/ie/i).test(navigator.userAgent)){document.getElementById("demo").onclick=function(){alert(window.event.screenX);}
}else {document.getElementById("demo").onclick = function (e) {alert(e.screenX);}
}
总结:
//IE是把event事件对象作为全局对象window的一个属性;可以使用event或window.event来访问;
//FireFox和Chrome等主流浏览器是通过把【事件对象】作为【事件响应函数】的【参数】进入传入的;
//兼容性的写法示例:
domElement.onclick = function( e ){e = e || window.event;//或(||)书写顺序有讲究,不能随意换
}
js中事件对象event的兼容性问题相关推荐
- js中事件对象event
一.Event对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! 当一个事件发生的时候, ...
- 关于js中事件的event.stopPropagation()方法的理解与举例说明
event.stopPropagation() 阻止捕获和冒泡阶段中当前事件的进一步传播. 在这之前先说一下事件触发的原理 事件触发原理 事件触发整体有三个阶段构成:捕获阶段 -> 目标阶段(不 ...
- 后处理程序文件大小的变量_【每日一题】(17题)面试官问:JS中事件流,事件处理程序,事件对象的理解?...
关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 2020,实「鼠」不易 2021,「牛」转乾坤 风劲潮涌当扬帆,任重道远须奋蹄! 一.前言 2020.12.23 立 ...
- js的三大家族(offset/scroll/client)和一个事件对象(event)///正则
一 offset 第1章 offset家族 4 1.1 三大家族和一个事件对象 4 1.2 Offset家族简介 4 1.2.1 offsetWidth和offsetHi ...
- javaScript中的事件对象event是怎样
事件对象event,每当一个事件被触发的时候,就会随之产恒一个事件对象event,该对象中主要包含了关于该事件的基本属性,事件类型type(click.dbclick等值).目标元素target(我的 ...
- js进阶课程 12-9 jquery的事件对象event的方法有哪些?
js进阶课程 12-9 jquery的事件对象event的方法有哪些? 一.总结 一句话总结:三组六个,阻止默认事件一组,阻止冒泡一组,阻止冒泡和剩余事件一组. 1.事件的默认动作指什么? 比如点a标 ...
- JS事件对象 (event)
#事件对象 (event) div.onclick = function(event){ console.log(event); let e = event||wind ...
- JS的事件对象和事件冒泡
2019独角兽企业重金招聘Python工程师标准>>> 1.事件对象 js的事件对象中保存了当前被触发事件的一些相关的属性信息,如事件源.事件发生时的鼠标位置.事件按键等. 事件对象 ...
- JavaScript:事件对象Event和冒泡
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 绑定事件的两种方式 我们在上一篇文章 DOM操作详解 中已经讲过事件的概 ...
最新文章
- Miscellaneous Character Drivers
- AngularJs快速上手掌握
- 学习C++和编程的50个观点
- Mysql命令行下实现数据的导入
- Eigen官网教程(2) Array类和元素级操作
- Nginx之http配置
- 抖音举办平台治理开放日 半年捣毁25个黑产团伙
- iOS实现简书的账号识别方式(正则表达式)
- hdu 3926 hands in hands
- CPU虚拟化技术解析
- 网络连接正常,IE不能打开网页的全面解决方法
- 造福身心障碍者 Skype及PowerPoint新增实时字幕功能
- 关于SMC的源式,汇式(漏式)。PNP和NPN的说明与区别
- keil(MDK) 5官方下载教程
- 计算机弹奏两只老虎爱跳舞,原神风物之诗琴乐谱大全 原神风物之诗琴谱乐谱弹奏攻略...
- node项目部署到云服务器
- 威联通NAS配置1.18.1Minecraft服务器
- Django--学生管理系统(django慢更)
- 电脑开机不能进入系统--死机
- 索骥馆-OFFICE系列之《北风网Excel高端应用培训:多条件约束报表自动统计系统分析与制作》共4章更新完