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 要素のようで、 studentidelems[i].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 に答える