列出Select的选项在FF和IE中给出了不同的结果
问题描述:
在我的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循环的工作方式相同。
感谢,
保罗
答
for
/in
循环遍历对象中的每个属性。
您没有在Firefox中看到这些属性,因为它们被标记为[DontEnum]
。
您应该使用普通的for
循环来遍历数组。
对于普通阵列,如果!obj.hasOwnProperty(key)
跳过键,则可以跳过for
/in
循环,但我不确定这是否适用于DOM对象。
谢谢你的回答。我绝对误解了作品中的/如何以及数组的陷阱。我做了更多的研究,发现我的问题已经在这里得到解答 - 我只是不知道寻找它的正确方法!这就是答案: http://*.com/questions/500504/javascript-for-in-with-arrays 再次感谢您的帮助...现在要改变我的代码! – Paul 2011-01-27 20:52:34