Javascript selectedIndex在firefox中不起作用,其数组元素为

Javascript selectedIndex在firefox中不起作用,其数组元素为,javascript,dom,selectedindex,getelementsbyname,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].

为什么这段代码可以在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;
}
elems=document.forms[0].getElementsByTagName(“选择”);
对于(i=0;i
查看相关的HTML片段会有很大帮助

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

<select 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;
}

定义“不起作用”。你期望
elems[i].studentid
成为什么样的人?见下面的评论。谢谢,我想你的回答确实回答了这个问题,但是要回答你最初的HTML请求。。。它的作用是查看GridView列,将学生与用户单击的学生进行匹配,并将行中的下拉列表切换到第一个元素(索引1)。这将揭示一个“现在”的价值。这在IE中有效,但在Firefox中无效。我以为问题出在elem.selectedIndex=1。我试着从其他谷歌搜索中把它改成类似jquery的代码,但都不起作用,事实上破坏了整个过程,因为它在IE中也不起作用!但关于“元素[i].studentid”,我认为问题就出在这里。Firefox认为“studentid”是一个关键字?根据我的回答,Firefox没有将非标准属性作为属性提供,因此您必须使用getAttribute来读取它们。或者,如果要将这些属性值作为属性访问,请对其使用标准属性(例如,或最近使用的属性)。
var elem = elems[i];
if (elem.getAttribute('studentid') == studid && elem.selectedIndex == 0) {
  elem.selectedIndex = 1;
}