0

2つの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>、1つの引数で呼び出されます。

<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であるか、オブジェクトではありません

これはどのように発生し、どうすれば解決できますか?

4

1 に答える 1

1

関数は 2 つの必須パラメーターを取得しますが、渡すのは 1 つだけです。

次のように、関数をリファクタリングして、2 番目のパラメーターが不要になるようにすることができます。

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

また、ほとんど同じように見える 2 つの異なる関数を使用するのは少し扱いに​​くいようです。さらに一歩進めると、コード全体を次のようにリファクタリングできます。

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 がInternet Explorer での問題を回避する方法についての優れた記事を書いています。.getElementById()

于 2013-02-07T12:41:37.463 に答える