Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ie、javascript和';项目';作为变量名_Javascript_Cross Browser - Fatal编程技术网

ie、javascript和';项目';作为变量名

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

这被认为是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'));
            }
        }
    }
功能选择取消选择所有项目(状态)
{
在面板(状态,$('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