2011-01-27 82 views
1

在我的JavaScript代码中,我试图列出Select的选项(及其值)。这里有一小段代码(我使用的YUI2库...日志声明只是把文字记录仪):列出Select的选项在FF和IE中给出了不同的结果

for (var opt in mySelect.options) 
{ 
    YAHOO.log('my opt, val: ' + opt + ', ' + mySelect.options[opt].value); 
} 

在Firefox中,我得到以下(正确)输出:

my opt, val: 0, 2 
my opt, val: 1, 1 
my opt, val: 2, 3 
my opt, val: 3, 4 
my opt, val: 4, 0 

但在Internet Explorer 7,我得到:

my opt, val: language, undefined 
my opt, val: scrollHeight, undefined 
my opt, val: isTextEdit, undefined 
my opt, val: currentStyle, undefined 
my opt, val: document, undefined 

我有点吃惊,至少可以说。我甚至尝试过(var opt in(mySelect.options)),我改变了变量opt的名字以防万一。没有什么改变。

如果我像这样的代码回路:

for (var idx=0; idx< mySelect.options.length; idx++) 
{ 
    YAHOO.log('my idx, val: ' + idx + ', ' + mySelect.options[idx].value); 
} 

那么IE正常工作为好。

为什么第一种方式不起作用?我认为for/in循环与for循环的工作方式相同。

感谢,

保罗

回答

5

for/in循环遍历对象中的每个属性。
您没有在Firefox中看到这些属性,因为它们被标记为[DontEnum]

您应该使用普通的for循环来遍历数组。
对于普通阵列,如果!obj.hasOwnProperty(key)跳过键,则可以跳过for/in循环,但我不确定这是否适用于DOM对象。

+0

谢谢你的回答。我绝对误解了作品中的/如何以及数组的陷阱。我做了更多的研究,发现我的问题已经在这里得到解答 - 我只是不知道寻找它的正确方法!这就是答案: http://stackoverflow.com/questions/500504/javascript-for-in-with-arrays 再次感谢您的帮助...现在要改变我的代码! – Paul 2011-01-27 20:52:34

相关问题