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

Pau*_*aul 1 javascript firefox select internet-explorer

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

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

在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
Run Code Online (Sandbox Code Playgroud)

但在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
Run Code Online (Sandbox Code Playgroud)

我至少可以说有点惊讶.我甚至尝试过(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);
}
Run Code Online (Sandbox Code Playgroud)

IE也运行正常.

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

谢谢,

保罗

SLa*_*aks 5

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

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