错误' document.getelementbyid(...)'是null还是不是对象

时间:2013-02-07 12:37:27

标签: javascript internet-explorer-6

我创建了两个JavaScript函数。

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中会导致以下错误:

  

错误'document.getelementbyid(...)'为null或不是对象

这是如何引起的?如何解决?

1 个答案:

答案 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()出现问题。