2012-09-17 61 views
0

我有一些舊代碼需要更新才能在Firefox中工作,而且我遇到了一個問題。firefox中的event.srcElement

在代碼中,有一個功能,看起來像這樣:

function tableEnter() { 

    myLocation = event.srcElement; 

} 

這並不工作在Firefox。我已經研究了這一點,但是我發現的大多數解決方案都需要將一個事件傳遞給此函數,然後對傳遞的e參數進行操作。 ...不幸的是,在我更新的代碼中,我沒有得到任何參數傳遞。

什麼解決方案使event.srcElemet在firefox中工作,沒有任何參數傳遞給我的函數?

編輯:

好吧,這個問題正在成爲:如何將事件對象傳遞給我的tableEnter()函數?

下面是該代碼目前正在做:

$(document).ready(function() { 
    //make table rows 
    //for every new table row... 
    myRow.onmouseover = tableEnter; (this is probably a bad name. it should be like..rowEnter. But this is the way I found the code) 
}); 

現在的問題是,我如何通過事件對象爲tableEnter()這樣我就可以在互聯網上做建議的東西,答案下面。

謝謝。

+1

見http://stackoverflow.com/questions/5055228/defining-javascript-event-object&注意,您還需要以不同的方式捕獲事件對象 –

回答

2

我真的不明白爲什麼你想要訪問事件對象,而沒有它是你的處理程序的參數。但是,嘿,那只是我。儘管沒有指定參數,但FF和chrome只是按照自己的意願進行操作,並將事件對象傳遞給處理程序。所以:

function tableEnter() 
{ 
    var evt = window.event || arguments[0]; 
    var src = evt.target || evt.srcElement; 
} 

就是這樣。就個人而言,我會建議你做整個萬維網是這樣做的:

function handler(e) 
{ 
    e = e || window.event; 
    var target = e.target || e.srcElement; 
} 

由於您使用FF,你不應該試圖從任何編碼規範或標準的發散太多,但是模糊他們可能是。至少比沒有任何標準或慣例更好


鑑於你的更新,只是改變你的函數定義:

function tableEnter(e) 
{ 
    //though in jQuery, I suspect e is allready X-browser-proof 
    e = e || window.event; 
    //just leave ^^this^^ line out, and check in IE: alert(typeof e); 
    //if it alerts object, jQuery passed the event object for you 
    var theRow = this;//<-- this points to the row that triggered the mouseover 
    var jQRow = $(this);//gives you access to jQuery methods 

    var target = e.target || e.srcElement;//<-- mainly of importance in delegation 
} 
+0

增加了上述問題的清晰度。我想實施您的(第二個)解決方案。我只需要在正確的方向引導。 – Jeff

+0

@ 1__:我更新了答案,在評論中還有更多解釋 –