未捕获的TypeError:无法设置属性' width'未定义的,javascript

时间:2014-07-21 21:55:30

标签: javascript google-chrome asp-classic

首先,我试图扩展以适应与用户相关的搜索(例如: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循环之前注释掉最后一个花括号下面的部分,那么一旦页面加载完毕,脚本只会出现错误消息。

1 个答案:

答案 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

xundefined;换句话说,代码具有不满足的期望,因此它会因错误而失败。因此,要跟踪此类错误的来源,您只需查看代码,以查看在.之后或方括号内使用属性名称的位置。