0

为什么这段代码在 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;
}
4

1 回答 1

1

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

在代码中,它似乎elems[i]是一个 select 元素,并且elems[i].studentid试图读取一个名为studentid的属性。相关的 HTML 可能类似于:

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

没有称为studentid的标准 HTML select 元素属性,因此即使该属性已添加到 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;
}
于 2013-03-28T03:25:21.857 回答