以下示例在IE8中进行了测试
我有一个非常简单的列表
<select>
<option>opt 1</option>
<option>opt 2</option>
</select>
假设this
引用第一个选项的DOM元素。当我this.selected
时,它会返回true
,即使它不是。我想要的是仅当DOM具有由用户/编码器明确定义的属性true
或selected
时才返回selected="selected"
的函数。
我不能使用hasAttribute
,因为它没有在ie8中定义。
请帮忙。
答案 0 :(得分:3)
如果当前在选择框中选择了该选项,则选项元素的selected
属性为true
。在标记中,您可以通过指定selected
属性来选择一个选项,但是还有其他方法可以在选择框中选择该选项(用户可以选择它,浏览器可以选择第一个选项)默认情况下,依此类推)。请注意关于默认值的位。在下拉选择框中,如果您没有在其中任何一个上放置selected
属性,几乎所有(所有?)浏览器都会自动选择第一个选项。
所以this.selected
可靠地告诉你元素是否被选中。
不幸的是,IE8的getAttribute
将为"selected"
属性返回"selected"
,即使标记没有它,如果选择了该元素。大多数其他浏览器不会这样做,他们理解属性和属性之间的区别,但遗憾的是IE8没有。
幸运的是,jQuery的attr
函数有一个解决方法(因为你标记了你的问题jquery
)。如果元素没有该属性,attr
将返回undefined
(而不是null
),即使在IE8上也是如此。所以如果你真的想知道,你可以找到那种方式。但很少关心这一点。 (注意:解决方法是in v1.10.2,但显然not in v1.7.2;如果您使用IE8查看它们,这些链接才真正有意义。)
但是在jQuery中读取选择框的值的常规方法是在选择框元素上使用.val
。
答案 1 :(得分:0)
你应该使用jQuery,然后:
var value = $('select').val();
这将返回所选选项的属性值,或者如果没有值,则返回标签(选项标签内的文本)。
答案 2 :(得分:0)
试试这个
function check() {
return document.getElementsByTagName('select').selectedIndex > -1;
}