兼容IE和Firefox的event對象||event 兼容總結


在IE中可以這樣 var a=window.event.clientX; 但在Firefox中這樣卻沒有辦法,怎樣獲取一個兼容的event對象呢?

比如可以在IE中alert(event.clientX); 但在firefox這樣就不行,比較妥善的做法是 var obj=window.event;//這樣 //但是這個只能在ie中得到值,如果我想在firefox中獲得這個obj.那么var obj=??????????//這里該怎么寫呢?

<script> /*firefox*/ function __firefox(){ HTMLElement.prototype.__defineGetter__("runtimeStyle", __element_style); window.constructor.prototype.__defineGetter__("event", __window_event); Event.prototype.__defineGetter__("srcElement", __event_srcElement); } function __element_style(){ return this.style; } function __window_event(){ return __window_event_constructor(); } function __event_srcElement(){ return this.target; } function __window_event_constructor(){ if(document.all){ return window.event; } var _caller = __window_event_constructor.caller; while(_caller!=null){ var _argument = _caller.arguments[0]; if(_argument){ var _temp = _argument.constructor; if(_temp.toString().indexOf("Event")!=-1){ return _argument; } } _caller = _caller.caller; } return null; } if(window.addEventListener){ __firefox(); } /*end firefox*/ </script>

event 兼容總結

event 在 IE 和 FF(Firefox) 中是不兼容的,現對常用的作個總結,以供參考,不代表全面。

一、設置事件

IE 中要命的是不支持用 setAttribute 動態設置 onclick 等事件屬性、對象屬性、集合屬性。所以涉及到兼容性問題,解決方法之一如下:

if (this.obj.attachEvent) 

    //IE 
    var eventStr = "FuncOnClick();"; 
    this.obj.attachEvent("onclick", function(){eval(eventStr)}); 

else 

    this.obj.setAttribute("onclick", "javascript:FuncOnClick();"); 
}

更多方法請參見:

二、event 對象

IE 中可以直接使用 event 對象,而 FF 中則不可以,解決方法之一如下:

var theEvent = window.event ||  arguments.callee.caller.arguments[0];

更多方法請參見:Netscape中使用event對象

三、srcElement 和 target

在 IE 中 srcElement 表示產生事件的源,比如是哪個按鈕觸發的 onclick 事件,FF 中則是 target。

var theEvent = window.event || arguments.callee.caller.arguments[0];
var srcElement = theEvent.srcElement; 
if (!srcElement) 

    srcElement = theEvent.target; 
}

更多內容請參見:IE 和 FF 中的 srcElement。

四、鼠標按鈕鍵值。

    • IE 認為:左鍵為 1,右鍵為 2,中鍵(滾輪按下)為 4。
    • FF 認為:左鍵為 0,右鍵為 2,中鍵(滾輪按下)為 1。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM