2013-02-07 86 views
0

我創建了兩個JavaScript函數。錯誤'document.getelementbyid(...)'爲空或不是對象

var a, b; 

function changeTo(a, b) { 
    document.getElementById(a).className = 'editborder'; 
    document.getElementById(b).className = 'editborder'; 
} 
function changeToo(a, b) { 
    document.getElementById(a).className = 'editborder_'; 
    document.getElementById(b).className = 'editborder_'; 
} 

他們被稱爲<asp:LinkButton>有一個說法:

<asp:LinkButton ID="LinkButton7" runat="server" 
    onMouseover="changeTo('div_master');" 
    onMouseout="changeToo('div_master');" 
    Text="Edit Bg Color" CommandArgument="0" OnClick="lnkchangebg_click"> 
</asp:LinkButton> 

它可以在Chrome的罰款,但在IE6它會導致以下錯誤:

error 'document.getelementbyid(...)' is null or not an object

這是怎麼引起的我該如何解決它?

+0

use ....,changeTo('div_master',''),changeToo('div_master',''); – polin

+0

別忘了ASP.Net webforms喜歡搞亂你的'id'屬性。檢查實際來源並確保它與您的代碼相符。 –

+0

請問爲什麼您正在開發/支持不推薦使用的互聯網瀏覽器? –

回答

1

您的函數獲取兩個必需的參數,並且只傳遞一個參數。

你可以重構你的功能,因此在第二個參數不會被需要,這樣的:

function changeToo(a, b) { 
    document.getElementById(a).className = 'editborder_'; 
    if (typeof b !== "undefined") { 
     document.getElementById(b).className = 'editborder_'; 
    } 
} 

它也似乎有點笨重使用,似乎做幾乎一模一樣的兩種不同的功能。如果你會採取它一步,你可以重構你的整個代碼如下:

function changeClass(a, strClass) { 
    if (typeof a === "string") { 
     document.getElementById(a).className = strClass; 
    } else if (typeof a === "object" && a.length > 0) { 
     for (var id in a) { 
      if (a.hasOwnProperty(id)) { 
       document.getElementById(id).className = strClass; 
      } 
     } 
    } else { 
     throw new Error("Invalid argument supplied in changeClass()."); 
    } 
} 

現在你可以這樣做:

<asp:LinkButton ID="LinkButton7" runat="server" 
    onMouseover="changeClass('div_master', 'editborder');" 
    onMouseout="changeClass('div_master', 'editborder_');" 
    Text="Edit Bg Color" CommandArgument="0" OnClick="lnkchangebg_click"> 
</asp:LinkButton> 

甚至:

<asp:LinkButton ID="LinkButton7" runat="server" 
    onMouseover="changeClass(['div_master', 'anotherElementId'], 'editborder');" 
    onMouseout="changeClass(['div_master', 'anotherElementId'], 'editborder_');" 
    Text="Edit Bg Color" CommandArgument="0" OnClick="lnkchangebg_click"> 
</asp:LinkButton> 

如果仍然沒有解決你的問題,Louis Lazaris寫了an excellent post關於在Internet Explorer中避免.getElementById()的問題。

+0

感謝Robin van Baalen ..問題解決了工作 –

相關問題