这是否被认为是 IE 中的 JS 错误?
请检查以下功能
function select_deselect_all_items(status)
{
select_deselect_items_under_panel(status, $('myPanel'));
panel = $('myPanel');
var items = panel.getElementsByTagName('input');
for (var n = 0; n < items.length; n++) {
item = items[n];
if (item.id.substr(0, 10) == 'myItems_') {
item.checked = status;
select_deselect_items_under_panel(status, $('myPanel'));
}
}
}
现在,这在 FF 和 Chrome 中工作正常,但在 IE 中生成错误。错误如下:
错误:无法获取属性“substr”的值:对象为 null 或未定义
我在我的代码中的几个地方都有这个函数(不幸的是,没有把它放在一个 js 文件中),我已经偶然发现了这个问题。问题似乎出在 item
变量上。如果将其更改为其他内容,即 myWildVarName
,一切似乎都正常。我在 IE 中调试页面,我看到 item
是一个具有某些属性的对象......
那么,是错误还是菜鸟错误?
干杯
最佳答案
您的代码确实有一个错误,因为您从未声明 item
变量,因此成为 Horror of Implicit Globals 的牺牲品。 .
我的猜测是您的页面上有一些东西具有 name
或 id
“item”,因此它正在成为 window< 的属性
因为 IE 这样做(许多其他浏览器也效仿)。您可能知道,window
的属性是全局属性,因此当您尝试在函数中分配给 item
符号时,您就是在分配给该全局属性。根据 item
是什么,IE 可能会尝试应用“实际上不分配给对象,而是分配给它的默认属性”逻辑(因为如果它想使用,它可以这样做宿主对象)并遇到问题。
声明您的局部变量(总是一个好主意),问题就会消失。
更新:既然您已经发布了实际错误,上面关于所发生事情的基本原理可能并不准确,但建议(声明本地)保持不变。 :-)
关于javascript - 即,javascript 和 'item' 作为变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6435677/