即,javascript和'item'作为变量名称

hum*_*ird 3 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 < items.length; n++) {
            item = items[n];
            if (item.id.substr(0, 10) == 'myItems_') {
                item.checked = status;
                select_deselect_items_under_panel(status, $('myPanel'));
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,这在FF和Chrome中运行良好,但在IE中生成错误.错误如下:

Error: Unable to get value of the property 'substr': object is null or undefined

我在整个代码中的几个地方都有这个功能(遗憾的是没有把它放到一个js文件中)我已经偶然发现了这个问题.问题似乎是item变数.如果将其更改为其他内容,即myWildVarName事情似乎正常.我在IE中调试了页面,我看到这item是一个具有某些属性的对象......

那么,一个错误还是一个新手的错误?

干杯

T.J*_*der 7

你的代码中确实存在错误,因为你从未声明item变量,因此成为Implicit Globals恐怖的牺牲品.

我的猜测是,你有你的页面有任何的东西nameid"项",所以这一点变得的一个属性window,因为IE浏览器是(和许多其他浏览器也纷纷效仿).您可能知道,属性window是全局变量,因此当您尝试分配item函数中的符号时,您将分配给该全局属性.根据具体item情况,IE可能会尝试应用"不实际分配给对象,而是分配给它的默认属性而不是"逻辑(因为如果它想要与宿主对象一起允许这样做)并遇到问题.

声明你的局部变量(总是一个好主意),问题应该消失.


更新:既然你已经发布了实际的错误,那么上面发生的事情的理由可能不是正确的,但建议(声明本地)保持不变.:-)