我创建了两个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或不是对象
这是如何引起的?如何解决?
答案 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()
出现问题。