FireFox JavaScript全局Event對象
更新時間:2009年06月14日 00:02:48 作者:
在IE下 JavaScript 中可以在任何地方使用全局的window.event來取得本次JavaScript被觸發(fā)的Event,從而取得 KeyCode,EventSourceElement 等對象。
而在FireFox中卻沒有這樣的對象,如果有函數(shù)嵌套調(diào)用,需要不停的向下傳遞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(),沒有參數(shù)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瀏覽器的做法是不好的,應(yīng)該使用UserAgent來判斷,JQuery等類庫中有好的實現(xiàn)。
這樣上面的 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的事件模型中最初的事件調(diào)用是將event顯示的傳遞給方法的,所以可以寫出GetEvent方法,取得喚起JavaScript的event。
復(fù)制代碼 代碼如下:
<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(),沒有參數(shù)event,這時需要修改Test2()為Test2(event) 十分的不美觀,雖然JavaScript這樣的修改,是方法的重載,但是也破壞了原來的方法簽名。
在FireFox中是否有window.event這樣的全局變量來獲取event?
不幸的是FireFox的對象模型中是沒有的,但是可以使用變通的方法取得。例如:
復(fù)制代碼 代碼如下:
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瀏覽器的做法是不好的,應(yīng)該使用UserAgent來判斷,JQuery等類庫中有好的實現(xiàn)。
這樣上面的 Test2方法就可以不用修改方法簽名了:
復(fù)制代碼 代碼如下:
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的事件模型中最初的事件調(diào)用是將event顯示的傳遞給方法的,所以可以寫出GetEvent方法,取得喚起JavaScript的event。

相關(guān)文章
微信小程序用戶授權(quán)環(huán)節(jié)實現(xiàn)過程
這篇文章主要介紹了微信小程序用戶授權(quán)環(huán)節(jié)實現(xiàn)過程,在商城項目中,我們需要對部分的頁面,進行一個授權(quán)的判別,例如購物車,及個人中心,需要完成用戶信息的授權(quán)后,獲取到相關(guān)信息2023-01-01Javascript代碼混淆綜合解決方案-Javascript在線混淆器
Javascript代碼混淆綜合解決方案-Javascript在線混淆器...2006-12-12微信小程序開發(fā)之選項卡(窗口底部TabBar)頁面切換
本文主要介紹了微信小程序開發(fā)之選項卡(窗口底部TabBar)頁面切換的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04用js實現(xiàn)的十進制的顏色值轉(zhuǎn)換成十六進制的代碼
用js實現(xiàn)的十進制的顏色值轉(zhuǎn)換成十六進制的代碼...2007-03-03js中動態(tài)創(chuàng)建json,動態(tài)為json添加屬性、屬性值的實例
下面小編就為大家?guī)硪黄猨s中動態(tài)創(chuàng)建json,動態(tài)為json添加屬性、屬性值的實例。小編覺的挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12