列出Select的选项会在FF和IE中显示不同的结果

时间:2011-01-27 18:34:16

标签: javascript internet-explorer firefox select

在我的JavaScript代码中,我试图列出Select的选项(及其值)。这是一段代码(我正在使用YUI2库...日志语句只是将文本放入记录器中):

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循环相同。

谢谢,

1 个答案:

答案 0 :(得分:5)

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

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