javascript - 未捕获的类型错误 : Cannot set property 'width' of undefined, javascript

标签 javascript google-chrome asp-classic

首先,我尝试扩展下拉列表以适应与用户相关的搜索(例如:Billy Bob's Restaurant - 98765)(这是用经典 ASP 编写的):

Response.Write "<td id='aRow' onMouseOver=""resizeMenu(" & i-1 & ", " & numOpts & ")"" colspan=2 style='padding-left:5px;'>" & vbcrlf

然后我有一个抛出错误的函数:无法设置未定义的属性“宽度”。

这是这里的函数:

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";

当页面上的多个元素使用 id 时,该代码期望 .getElementById() 返回一个 NodeList。浏览器曾经这样做,但据我所知,Firefox 和 Chrome 都没有这样做。

对多个元素使用相同的 id 与标识符的目的背道而驰。您可以通过将代码更改为

,让您的代码在支持 .querySelectorAll() 的浏览器中运行
   document.querySelectorAll('#aRow')[i] // ... whatever ...

哦,一般来说,像“无法[做某事]未定义的属性“某事””这样的错误意味着您有这样的代码

      x.something

但是x未定义;换句话说,代码的期望没有得到满足,因此它会因该错误而失败。因此,要追踪此类错误的来源,您只需在代码中查找在 . 之后或方括号内使用属性名称的位置即可。

关于javascript - 未捕获的类型错误 : Cannot set property 'width' of undefined, javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24875501/

相关文章:

javascript - 为什么点击 ESCAPE 会阻止 &lt;iframe&gt; 加载?

asp-classic - 在ASP中显示消息框

google-chrome - 嵌入式 YouTube 无法在 Chrome 中运行

html - 在 mozilla 中,我的按钮看起来不像在 chrome 中显示的那样好

javascript - 在 QueryString 以外的页面调用上将值传递给 ASP 页面

c# - 在 ASP.NET 中形成 POST

javascript - 在大型 Web 应用程序中处理 JavaScript(可重用性、捆绑、单元测试...)

javascript - Div 未显示,包含源

javascript - 使用 attr jquery 删除样式属性

javascript - window.screenX/screenY 没有在 chrome 上更新