首先,我有一些下拉列表,我正在尝试对此进行扩展以适合与用户相关的搜索(例如:Billy Bob's Restaurant-98765)(使用经典的ASP编写):
Response.Write "<td id='aRow' onMouseOver=""resizeMenu(" & i-1 & ", " & numOpts & ")"" colspan=2 style='padding-left:5px;'>" & vbcrlf
然后,我有一个引发错误的函数:无法设置未定义的属性“ width”。
这是这里的功能:
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循环之前最后一个花括号下方的部分,则该脚本仅在页面加载完成后才显示错误消息。
document.getElementById('aRow')[i].width = (optWidth + 60).toString() + "px";
.getElementById()
当页面上的多个元素使用该ID时,该代码期望返回一个NodeList。浏览器曾经这样做,但据我所知Firefox和Chrome都没有。
对多个元素使用相同的id与标识符的目的背道而驰。您可以.querySelectorAll()
通过将代码更改为
document.querySelectorAll('#aRow')[i] // ... whatever ...
哦,总的来说,诸如“无法[执行某项]属性“未定义的某事”之类的错误意味着您已经获得了如下代码
x.something
但是x
是undefined
; 换句话说,代码具有无法满足的期望,因此它会因该错误而失败。因此,要查找此类错误的根源,您只需查看代码,即可找到在a.
或方括号内使用属性名称的位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句