如何判断选择列表在IE 8中是否没有选择?

时间:2011-10-31 00:40:37

标签: javascript internet-explorer dom

如何在IE 8中使用JavaScript来区分选择的第一个项目和没有选择的项目?

<select id="first">
    <option>John</option>
    <option>Paul</option>
</select>

<select id="second">
    <option selected="selected">George</option>
    <option>Pete</option>
</select>

浏览器呈现第一个列表,显然选择了“John”。在Chrome和Firefox中,未正确选择该选项:CSS选择器无法找到它,因此我可以判断它未被选中。但是,IE 8确实选择了它,所以我不能说它没有被选中。

这是一个小提琴,它验证我可以分辨出FF和Chrome中的两种情况,但不是IE中的情况:http://jsfiddle.net/YvfpV/7/

有没有办法在IE 8中区分这两种情况?

1 个答案:

答案 0 :(得分:2)

如果未选择任何选项,则select元素的selectedIndex属性将为-1。

但是,如果没有选项具有所选属性(即没有preselected),浏览器可以默认选择一个选项。因此,建议一个选项具有所选属性,以便您知道默认情况下将选择哪个选项,并且绝不会出现没有选择任何选项的情况。

您无法可靠地确定用户是选择了该选项还是仅使用了默认选项,因此请不要根据您的逻辑确定。

修改

<form onsubmit="return false">
  <select id="sel0">
    <option>0
    <option>1
  </select>
  <button onclick="
    var sel = document.getElementById('sel0');
    alert('selectedIndex: ' + sel.selectedIndex +  // 0
          '\noptions[0].selected: ' + sel.options[0].selected); // true
    ">hey</button>
  <input type="reset">
</form>

在Firefox 5和Chrome 14中,select的默认状态是selecteIndex == 0,第一个选项的selected属性== true。因此OP的明显逻辑并不适用于那些指定浏览器的版本。