当前位置: 首页 > 图文教程 > 网络编程 > Javascript > FireFox JavaScript全局Event对象

Javascript
通过JavaScript脚本复制网页上的一个表格
光标定位等TextRange的操作的范例代码
网页与键盘
下拉菜单
点此处秒后立即下载
繁简字转换功能
用javascript制作放大镜放大图片
一个非常强大完整的web表单验证程序Validator v1.05
[原创]checkbox实现全选的多种方法 不断更新
关于IFRAME 自适应高度的研究
document.all还是document.getElementsByName?
光标的帖子总结(Range的使用)
下拉菜单既可以选择,又可以自己填写
用于table内容排序
匹配html标记的正则
图片向上滚动
常用参考资料(手册)下载或者链接
測試代碼真方便
CSS+JS构建的图片查看器
如何实现iframe(嵌入式帧)的自适应高度

Javascript 中的 FireFox JavaScript全局Event对象


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 179 ::
收藏到网摘: n/a

在IE下 JavaScript 中可以在任何地方使用全局的window.event来取得本次JavaScript被触发的Event,从而取得 KeyCode,EventSourceElement 等对象。 而在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。
Click to Open in New Window