讓FireFox支援window.event屬性

來源:互聯網
上載者:User

  眾所周知,網頁裡有兩種擷取事件對象的辦法。一種是訪問window.event屬性,另一種便是事件函數的第一個參數。

  IE裡只支援window.event,Firefox只支援參數的形式,而其他主流瀏覽器兩者都支援。所以平時為了相容FF,一般都寫成:

function handle(e){    e = e || event;    ...}

   

  雖然這樣大多數情況下能運行,但是對於內嵌的調用就有問題了。比如<img onclick="handle()" />,雖然我們可以把arguments[0]當做參數傳遞過去,但很多情況下這裡都是this,因為handle可能綁定了多個元素。雖然也有解決的辦法,但終究麻煩了,不如給Firefox做一個一勞永逸的辦法:給他的window添加一個event的屬性(Getter):

if(is ff..){       var $E = function(){var c=$E.caller; while(c.caller)c=c.caller; return c.arguments[0]};       __defineGetter__("event", $E);}

 

  每當Firefox訪問到event屬性,就會順著調用棧訪問到最頂層的函數,即捕捉事件的那個函數,該函數的第一個參數即是事件對象。這樣,所有的瀏覽器都可以用event屬性,無需e=e||event那樣的代碼了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.