標籤:style ar io color 使用 sp strong on div
window.event問題
問題說明:window.event 只能在IE下運行,而不能在Firefox下運行,這是因為Firefox的event只能在事件發生的現場使用。
解決方案:在事件發生的函數上加上event參數,在函數體內(假設形參為evt)使用 var myEvent = evt?evt:(window.event?window.event:null)
在Firefox頁面調用後,其windows.event對象為undefined:
- if (typeof (window.event) == ‘undefined‘)
- alert(‘window.event is undefined.‘);
- else
- 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‘ onclick=‘_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‘ onclick=‘_test2()‘ />
event.srcElement問題
問題說明:IE下,even對象有srcElement屬性,但是沒有target屬性;Firefox下,even對象有target屬性,但是沒有 srcElement屬性。
解決方案:使用srcObj = event.srcElement ? event.srcElement : event.target;
Event事件的相容性(轉)