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 相关文章推荐
通过javascript设置css属性的代码
Dec 28 Javascript
Firefox下提示illegal character并出现乱码的原因
Mar 25 Javascript
JS中实现简单Formatter函数示例代码
Aug 19 Javascript
Bootstrap每天必学之缩略图与警示窗
Nov 29 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
jQuery实现二级下拉菜单效果
Jan 05 Javascript
jQuery实现下拉加载功能实例代码
Apr 01 Javascript
vue如何解决循环引用组件报错的问题
Sep 22 Javascript
微信公众号开发之微信支付代码记录的实现
Oct 16 Javascript
在Vue.js中使用TypeScript的方法
Mar 19 Javascript
基于javascript的无缝滚动动画1
Aug 07 Javascript
elementUI同一页面展示多个Dialog的实现
Nov 19 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
dedecms模板标签代码官方参考
2007/03/17 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
python django集成cas验证系统
2014/07/14 Python
python实现数组插入新元素的方法
2015/05/22 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
寄语学生的话
2014/04/10 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
师范生求职自荐信
2014/06/14 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
郭明义电影观后感
2015/06/08 职场文书
python实现简单的聊天小程序
2021/07/07 Python