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的兼容性问题相关推荐

  1. js中事件对象event

    一.Event对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! 当一个事件发生的时候, ...

  2. 关于js中事件的event.stopPropagation()方法的理解与举例说明

    event.stopPropagation() 阻止捕获和冒泡阶段中当前事件的进一步传播. 在这之前先说一下事件触发的原理 事件触发原理 事件触发整体有三个阶段构成:捕获阶段 -> 目标阶段(不 ...

  3. 后处理程序文件大小的变量_【每日一题】(17题)面试官问:JS中事件流,事件处理程序,事件对象的理解?...

    关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 2020,实「鼠」不易 2021,「牛」转乾坤 风劲潮涌当扬帆,任重道远须奋蹄! 一.前言 2020.12.23 立 ...

  4. js的三大家族(offset/scroll/client)和一个事件对象(event)///正则

                  一  offset 第1章 offset家族 4 1.1 三大家族和一个事件对象 4 1.2 Offset家族简介 4 1.2.1 offsetWidth和offsetHi ...

  5. javaScript中的事件对象event是怎样

    事件对象event,每当一个事件被触发的时候,就会随之产恒一个事件对象event,该对象中主要包含了关于该事件的基本属性,事件类型type(click.dbclick等值).目标元素target(我的 ...

  6. js进阶课程 12-9 jquery的事件对象event的方法有哪些?

    js进阶课程 12-9 jquery的事件对象event的方法有哪些? 一.总结 一句话总结:三组六个,阻止默认事件一组,阻止冒泡一组,阻止冒泡和剩余事件一组. 1.事件的默认动作指什么? 比如点a标 ...

  7. JS事件对象 (event)

    #事件对象 (event) div.onclick = function(event){         console.log(event);         let e = event||wind ...

  8. JS的事件对象和事件冒泡

    2019独角兽企业重金招聘Python工程师标准>>> 1.事件对象 js的事件对象中保存了当前被触发事件的一些相关的属性信息,如事件源.事件发生时的鼠标位置.事件按键等. 事件对象 ...

  9. JavaScript:事件对象Event和冒泡

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 绑定事件的两种方式 我们在上一篇文章 DOM操作详解 中已经讲过事件的概 ...

最新文章

  1. Miscellaneous Character Drivers
  2. AngularJs快速上手掌握
  3. 学习C++和编程的50个观点
  4. Mysql命令行下实现数据的导入
  5. Eigen官网教程(2) Array类和元素级操作
  6. Nginx之http配置
  7. 抖音举办平台治理开放日 半年捣毁25个黑产团伙
  8. iOS实现简书的账号识别方式(正则表达式)
  9. hdu 3926 hands in hands
  10. CPU虚拟化技术解析
  11. 网络连接正常,IE不能打开网页的全面解决方法
  12. 造福身心障碍者 Skype及PowerPoint新增实时字幕功能
  13. 关于SMC的源式,汇式(漏式)。PNP和NPN的说明与区别
  14. keil(MDK) 5官方下载教程
  15. 计算机弹奏两只老虎爱跳舞,原神风物之诗琴乐谱大全 原神风物之诗琴谱乐谱弹奏攻略...
  16. node项目部署到云服务器
  17. 威联通NAS配置1.18.1Minecraft服务器
  18. Django--学生管理系统(django慢更)
  19. 电脑开机不能进入系统--死机
  20. 索骥馆-OFFICE系列之《北风网Excel高端应用培训:多条件约束报表自动统计系统分析与制作》共4章更新完

热门文章

  1. 官方回应:“这是对开源的真正威胁”,红帽高管亲自撰文坦露心迹
  2. 2022暑期杭电第三场
  3. CloudEvents简介
  4. php 图片压缩 保留exif,保留图片原有的EXIF
  5. 国有企业利润突破9000亿的喜与忧
  6. vue身份证正则校验的2种类型
  7. 我的fedora9装机配置和软件安装-全过程
  8. 小米手机MIUI系统局域网同网络传输问题的方法步骤
  9. mysql raise_raise error mysql引发异常
  10. 2023年企业降低云支出的小方法汇总