FireFox JavaScript全局Event对象


Posted in Javascript onJune 14, 2009

而在FireFox中却没有这样的对象,如果有函数嵌套调用,需要不停的向下传递Event,例如下面的场景。

<div style="background-color:Red; width:300px; height:300px;" onclick="Test(event,this);" id="panel"></div> 
function Test(event,dom){ 
Test1(event); 
} 
function Test1(event){ 
Test2(event); 
} 
function Test2(event){ 
alert(event.target.id); 
}

在Test2方法中需要使用event,就需要写成这样。如果在某种场景下,比如添加新功能,需要修改原来的Test2方法,需要访问event对象,而原来Test2方法的签名是Test2(),没有参数event,这时需要修改Test2()为Test2(event) 十分的不美观,虽然JavaScript这样的修改,是方法的重载,但是也破坏了原来的方法签名。
在FireFox中是否有window.event这样的全局变量来获取event?
不幸的是FireFox的对象模型中是没有的,但是可以使用变通的方法取得。例如:
function GetEvent(caller){ 
if(document.all) 
return window.event; //For IE. 
if(caller == null || typeof(caller) != "function") 
return null; 
while(caller.caller != null){ 
caller = caller.caller; 
} 
return caller.arguments[0]; 
}

这里使用document.all判断是否是IE浏览器的做法是不好的,应该使用UserAgent来判断,JQuery等类库中有好的实现。
这样上面的 Test2方法就可以不用修改方法签名了:
function Test2(){ 
var event = GetEvent(Test2); 
alert(GetEventTarget(event).id); 
} 
function GetEventTarget(event){ 
if(document.all) 
return event.srcElement; 
return event.target; 
}

为什么可以写出GetEvent方法,取得Event?
因为在Firefox的事件模型中最初的事件调用是将event显示的传递给方法的,所以可以写出GetEvent方法,取得唤起JavaScript的event。
FireFox JavaScript全局Event对象
Javascript 相关文章推荐
Jquery中增加参数与Json转换代码
Nov 20 Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 Javascript
jQuery实现 注册时选择阅读条款 左右移动
Apr 11 Javascript
jquery easyui combobox模糊过滤(示例代码)
Nov 30 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 Javascript
iframe中使用jquery进行查找的方法【案例分析】
Jun 17 Javascript
JS实现重新加载当前页面
Nov 29 Javascript
Bootstrap 响应式实用工具实例详解
Mar 29 Javascript
JavaScript实现数字前补“0”的五种方法示例
Jan 03 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
Nov 23 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
Javascript 错误处理的几种方法
Jun 13 #Javascript
Javascript 学习书 推荐
Jun 13 #Javascript
javascript 框架小结 个人工作经验
Jun 13 #Javascript
动态刷新 dorado树的js代码
Jun 12 #Javascript
firefo xml 读写实现js代码
Jun 11 #Javascript
犀利的js 函数集合
Jun 11 #Javascript
js 操作css实现代码
Jun 11 #Javascript
You might like
php入门教程 精简版
2009/12/13 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
Symfony生成二维码的方法
2016/02/04 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
JavaScript鼠标拖拽事件详解
2020/04/03 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
用python实现面向对像的ASP程序实例
2014/11/10 Python
python实现文件快照加密保护的方法
2015/06/30 Python
回调函数的意义以及python实现实例
2017/06/20 Python
详解python中的文件与目录操作
2017/07/11 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
python3多线程知识点总结
2019/09/26 Python
sklearn+python:线性回归案例
2020/02/24 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
简单说下OSPF的操作过程
2014/08/13 面试题
英语专业毕业个人求职自荐信
2013/09/21 职场文书
汽车销售顾问求职自荐信
2014/01/01 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
推普标语口号大全
2015/12/26 职场文书
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫