selectedIndex在firefox中不起作用,来自数组元素

时间:2013-03-28 02:32:43

标签: javascript dom selectedindex getelementsbyname

为什么这段代码可以在IE中运行,但在Firefox中却不行?

elems = document.forms[0].getElementsByTagName("select");
for (i = 0; i < elems.length; i++) {
   if (elems[i].studentid && elems[i].studentid == studid && elems[i].selectedIndex == 0)
      elems[i].selectedIndex = 1;
}

1 个答案:

答案 0 :(得分:1)

查看相关的HTML片段会有很大帮助。

在代码中,似乎elems[i]是一个select元素,elems[i].studentid是尝试读取名为 studentid 的属性。相关的HTML可能如下:

<select studentid="..." ...>

没有名为 studentid 的标准HTML选择元素属性,因此即使该属性已添加到select元素,它也不会在Firefox(可能是其他浏览器)中作为属性使用。因此,测试失败了:

elems[i].studentid

Firefox将返回undefined,其评估为false。但是,IE确实将非标准属性添加为属性,因此如果已设置属性,则测试可以在IE中传递。

要访问非标准属性, getAttribute 方法应该用于跨浏览器兼容性,因此测试可能是:

elems[i].hasAttribute('studentid') && elems[i].getAttribute('studentid') == studid ... 

hasAttribute测试中似乎没有任何值,因此可能会被删除。由于多次使用elems[i],我还会存储结果:

var elem = elems[i];
if (elem.getAttribute('studentid') == studid && elem.selectedIndex == 0) {
  elem.selectedIndex = 1;
}