首先,我试图扩展以适应与用户相关的搜索(例如:Billy Bob&#39的餐馆 - 98765)(这是用经典ASP编写的) ):
Response.Write "<td id='aRow' onMouseOver=""resizeMenu(" & i-1 & ", " & numOpts & ")"" colspan=2 style='padding-left:5px;'>" & vbcrlf
然后我有一个抛出错误的功能:无法设置属性&#39; width&#39;未定义的。
这是函数:
function resizeMenu(theOpt, numOpts) {
var i, thisOpt;
var toAdjust;
if (numOpts > 1 ) {
toAdjust = 60 / (numOpts - 1);
} else {
toAdjust = 0;
}
for (i=0; i < numOpts; i++) {
thisOpt = document.getElementById("anOpt" + (i+1));
if (i == theOpt) {
if (numOpts > 1) {
document.getElementById('aRow')[i].width = (optWidth + 60).toString() + "px";
thisOpt.style.width = (optWidth + 40).toString() + "px";
} else {
document.getElementById('aRow').width = (optWidth).toString() + "px";
thisOpt.style.width = (optWidth - 20).toString() + "px";
}
} else {
if (numOpts > 1) {
document.getElementById('aRow')[i].width = (optWidth - toAdjust).toString() + "px";
} else {
document.getElementById('aRow').width = (optWidth - toAdjust).toString() + "px";
}
thisOpt.style.width = (optWidth - toAdjust - 20).toString() + "px";
}
}
};
当我将鼠标悬停在下拉菜单上时,我收到了错误消息。我查看了代码,但我还没弄清楚到底是什么错误。
我还应该注意到,我已经继承了这段代码,而且我在JavaScript编程方面还是比较陌生的。错误显示在Chrome的调试程序中。在Firefox和IE11中,它没有出现在调试器中。如果我在for循环之前注释掉最后一个花括号下面的部分,那么一旦页面加载完毕,脚本只会出现错误消息。
答案 0 :(得分:1)
document.getElementById('aRow')[i].width = (optWidth + 60).toString() + "px";
当id被页面上的多个元素使用时,该代码期望.getElementById()
返回NodeList。浏览器曾经这样做,但据我所知,Firefox和Chrome都没有。
对多个元素使用相同的id与标识符的目的相反。您可以通过将代码更改为
来使代码在支持.querySelectorAll()
的浏览器中运行
document.querySelectorAll('#aRow')[i] // ... whatever ...
哦,一般来说,像“不能[做某事]属性”这样的错误“未定义”意味着你有像
这样的代码 x.something
但x
为undefined
;换句话说,代码具有不满足的期望,因此它会因错误而失败。因此,要跟踪此类错误的来源,您只需查看代码,以查看在.
之后或方括号内使用属性名称的位置。