ie、javascript和';项目';作为变量名
这被认为是IE中的JS错误吗 请检查以下功能ie、javascript和';项目';作为变量名,javascript,cross-browser,Javascript,Cross Browser,这被认为是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
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'));
}
}
}
功能选择取消选择所有项目(状态)
{
在面板(状态,$('myPanel')下选择取消选择项目;
面板=$('myPanel');
var items=panel.getElementsByTagName('input');
对于(变量n=0;n
现在,这在FF和Chrome中可以正常工作,但在IE中会产生错误。错误如下:
错误:无法获取属性“substr”的值:对象为null或未定义
我在代码中的几个地方都有这个函数(不幸的是,我没有将它放在一个js文件中),我已经偶然发现了这个问题。问题似乎出在项
变量上。如果将其更改为其他内容,即myWildVarName
,则一切正常。我在IE中调试了这个页面,我发现项
是一个具有特定属性的对象
那么,是虫子还是新手犯的错误
干杯您的代码中确实有一个错误,因为您从未声明
项
变量,因此成为该变量的牺牲品
我的猜测是,你的页面上有些东西要么有名称
,要么有id
“项”,因此这就成为窗口
的一个属性,因为IE就是这样做的(许多其他浏览器也效仿了)。您可能知道,窗口
的属性是全局属性,因此,当您尝试在函数中指定项
符号时,您正在指定该全局属性。根据项
是什么,IE可能试图应用“不实际分配给对象,而是分配给其默认属性”逻辑(因为如果它想使用宿主对象,它可以这样做)并遇到问题
声明您的局部变量(总是一个好主意),问题就应该消失了
更新:现在您已经发布了实际错误,上面对发生的情况的解释可能不准确,但建议(声明本地)保持不变。:-) IE和其他一些浏览器习惯于在全局范围内为每个具有id的元素添加引用,因此
item
在IE中已经有值的原因可能是您有一个具有id=“item”
的元素
如果将项
变量声明为函数中的局部变量,则全局范围内也存在该变量不是问题:
var item;
谢谢TJ给出的答案和关于NiftySippets的文章。这澄清了一些事情。@playcat:不用担心,很高兴这有帮助。最好的,我只是自己查到了这个错误。我看不到第1000项:JSfiddle