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实现控制经纬度显示地图与卫星
May 20 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
Aug 13 Javascript
JS、DOM和JQuery之间的关系示例分析
Apr 09 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
Dec 08 Javascript
JavaScript缓冲运动实现方法(2则示例)
Jan 08 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
Feb 25 Javascript
全面理解JavaScript中的继承(必看)
Jun 16 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
Angular2关于@angular/cli默认端口号配置的问题
Jul 15 Javascript
关于Angularjs中跨域设置白名单问题
Apr 17 Javascript
vue中的provide/inject的学习使用
May 09 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
Oct 24 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将向Java靠拢
2006/10/09 PHP
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
初识Node.js
2015/03/20 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
python创建线程示例
2014/05/06 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
python面向对象 反射原理解析
2019/08/12 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
基于python plotly交互式图表大全
2019/12/07 Python
python正则表达式实例代码
2020/03/03 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
比驿:全球酒店比价网
2018/06/20 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
自动化职业生涯规划书范文
2014/01/03 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
人民教师求职自荐信
2014/03/12 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
2015年司法局工作总结
2015/05/22 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
Python面向对象之成员相关知识总结
2021/06/24 Python
我的收音机情缘
2022/04/05 无线电