window.event 兼容 問題

window.event問題
問題說明:window.event 只能在IE下運行,而不能在Firefox下運行,這是因爲Firefox的event只能在事件發生的現場使用。
解決方法:在事件發生的函數上加上event參數,在函數體內(假設形參爲evt)使用 var myEvent = evt?evt:(window.event?window.event:null)

在Firefox頁面調用後,其windows.event對象爲undefined:

  1. if (typeof (window.event) == 'undefined') 
  2. alert('window.event is undefined.'); 
  3. else 
  4. alert('window.event is defined.'); 

以上代碼在Firefox中執行,結果爲:"window.event is undefined."。IE 和 Chrome中執行結果:“window.event is defined."

1. 在函數中傳遞event參數

  在函數中傳遞event參數,這樣我們就可以兼容IE和FF的event的獲取了,如下面的函數:

function _test(evt)
{
var src = evt.srcElement || evt.target; // 獲取觸發事件的源對象
alert(src.value); // 打印該對象的value屬性
}

    那麼我們在使用的時候就應該這樣:

<input type='button' value='click me' οnclick='_test(event)' />

2.在函數調用中不傳遞event對象

雖然在函數中沒有傳遞參數,這個在IE下沒有任何影響,因爲window.event是全局對象,在什麼地方都可以直接調用的,而在FF下就不行了。所以我們這裏要使用另外一種方式來獲取了,如下:

unction _test2()
{
var evt = window.event || arguments.callee.caller.arguments[0]; // 獲取event對象
var src = evt.srcElement || evt.target; // 獲取觸發事件的源對象
var iKeyCode = evt.keyCode || evt.which; //獲取按鈕代碼
alert(src.value); // 打印該對象的value屬性
if (window.navigator.userAgent.indexOf("IE")>=1){
       evt.keyCode =0;
              evt.returnValue=false;
           }else{
              evt.preventDefault();
           }
}

    那麼,我們在使用的時候就可以想普通的函數調用一樣,直接輸入函數名稱即可,如下:

<input type='button' value='click me2' οnclick='_test2()' />

 

 

event.srcElement問題
問題說明:IE下,even對象有srcElement屬性,但是沒有target屬性;Firefox下,even對象有target屬性,但是沒有 srcElement屬性。
解決方法:使用srcObj = event.srcElement ? event.srcElement : event.target;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章