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 相关文章推荐
xheditor与validate插件冲突的解决方案
Apr 15 Javascript
Function.prototype.call.apply结合用法分析示例
Jul 03 Javascript
javaScript函数中执行C#代码中的函数方法总结
Aug 07 Javascript
js函数返回多个返回值的示例代码
Nov 05 Javascript
jquery ajax,ashx,json的用法总结
Feb 12 Javascript
js实现简单div拖拽功能实例
May 12 Javascript
JavaScript实现Flash炫光波动特效
May 14 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
Feb 08 Javascript
react中实现搜索结果中关键词高亮显示
Jul 31 Javascript
深入理解 JS 垃圾回收
Jun 03 Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
vue实现在进行增删改操作后刷新页面
Aug 05 Javascript
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 Mysql编程之高级技巧
2008/08/27 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
详谈javascript异步编程
2016/02/21 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
python 获取文件列表(或是目录例表)
2009/03/25 Python
python 合并文件的具体实例
2013/08/08 Python
Python Socket编程详细介绍
2017/03/23 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
python交易记录整合交易类详解
2019/07/03 Python
Python编写打字训练小程序
2019/09/26 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
最新销售员个人自荐信
2013/09/21 职场文书
自主招生教师推荐信
2014/05/10 职场文书
运动会宣传口号
2014/06/09 职场文书
多媒体教室标语
2014/06/26 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
实习协议书
2015/01/27 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
通讯稿格式及范文
2015/07/22 职场文书