2012-09-18 77 views
0

我有一個關於多瀏覽器兼容性的問題。我想在下面的代碼中使用event.target,而不是event.srcElement,以使其適用於Firefox。如何使此代碼與Firefox瀏覽器兼容

我已經使用target = event.target || event.srcElement。它不工作。任何幫助將不勝感激。

function jumptoPopupMenuItem(theMenuID) 
{     
    if (event.srcElement.className == "RightClickMenuItems") 
    { 
    if (event.srcElement.getAttribute("url") != null) 
    {   
     var strParameters = "";          
     if (theMenuID == "mnuAppointmentMenu") 
     { 
     strParameters = "AppointmentNumber=" + m_strAppointmentTypeYearNumber; 
     } 
     else if (theMenuID == "mnuAvailableHourMenu") 
     { 
     strParameters = "PreFillLanguageID=" + m_nLanguageID; 
     strParameters = strParameters + "&PreFillInterpreterID=" + m_nInterpreterID; 
     strParameters = strParameters + "&PreFillDateOfService=" + m_dtDateOfService; 
     } 
     if (event.srcElement.getAttribute("target") != null) 
     { 
     var PopupWindow = window.open(
      event.srcElement.url + strParameters, 
      event.srcElement.getAttribute("target")); 
     PopupWindow.focus(); 
     } 
     else 
     { 
     window.location = event.srcElement.url; 
     } 
    } 
    hidePopupMenu(theMenuID); 
    } 
} 
+1

追加代碼,其中在註冊事件處理程序元件(例如'attachEvent' ,'addEventListener')。 –

+0

你可以給我一些更多的細節。對於Firefox的comapatibilty。我應該將srcElement更改爲target,因爲srcElement不會被Firefox識別。你能給我提供解決方案嗎? – user1678742

+0

你的代碼('target = event.target || event.srcElement')是有效的,但函數'jumptoPopupMenuItem()'必須使用'event'對象才能正常工作。在IE中,你可以使用全局'window.event'對象(或簡單的'event'),但是在FF中'window.event'沒有被定義。閱讀我的答案以獲得一些解釋和例子。 –

回答

0

一些標準的方式與兼容性(非常簡化的代碼)註冊事件處理程序:

HTML:

<button onclick="eventHandlerFunc(event)" /> 
<!-- better to register as: --> 
<button onclick="eventHandlerFunc.call(this,event)" /> 

的JavaScript(的addEventListener或的attachEvent):

if (window.addEventListener) someElem.addEventListener("click",eventHandlerFunc,false); 
else if (window.attachEvent) someElem.attachEvent("onclick",eventHandlerFunc); 

JavaScript的(元素屬性):

someElem.onclick = eventHandlerFunc; 

eventHandlerFunc()凡功能定義爲:

function eventHandlerFunc(event) { // or var eventHandlerFunc = function(event) { 
    event = event||window.event; // can be needed only for IE6-IE8 
           // because `event` parameter hide `event` global 
           // variable (`window.event`) 
    var target = event.target||event.srcElement 
} 

注:如果必須添加用於this可變額外代碼所需的兼容性。

如果然後需要使用其他功能內部event變量(內部eventHandlerFunc()定義爲參數),則必須將其發送給這些功能:

function eventHandlerFunc(event) { 
    event = event||window.event; // can be needed only for IE6-IE8 
    /* 
    ... 
    */ 
    jumptoPopupMenuItem(event,theMenuID); 
} 

function jumptoPopupMenuItem(event,theMenuID) { 
}