jQuery无法通过<option>元素上的attr()设置“selected”=“selected”?</option>

时间:2010-09-16 18:45:34

标签: jquery jquery-selectors

<select>
    <option>1</option>
    <option>2</option>
    <option class="test">3</option>
</select>

$('.test').attr('selected', 'selected');​

上面的选择框会选择第三个选项作为默认选项而不会出现任何问题。 但是,如果您使用Firebug检查元素,则所选selected="selected"内不存在任何<option>属性。

我知道这不是一个大问题,因为它仍然工作但我需要selected="selected"所以我的其他脚本可以捕获它并执行进一步处理。那里有解决方法吗?

感谢。

3 个答案:

答案 0 :(得分:23)

selected属性对应于该选项的当前选择状态。 selected属性对应于默认选择性,如果在表单上调用.reset()(或单击type="reset"按钮),则该属性将被恢复。可以使用DOM属性selected访问当前选择状态,而在属性defaultSelected下访问由属性反映的默认选择。

value / defaultValue上的<input type="text"><textarea>以及checked上的defaultChecked / type="checkbox" /同样如此"radio"

jQuery的attr()被误导性地命名,并且它试图假装属性和属性是同样的事情是有缺陷的。当您使用attr()时,您通常会访问该属性,该属性。因此,$(el).attr('selected', 'selected')实际上正在el.selected= 'selected'。这是有效的,因为'selected'与任何非空字符串一样,都是'真实':它会转换为el.selected= true。但这在任何时候都不会触及selected="selected"属性。

IE通过以下方式进一步使这种已经令人困惑的情况复杂化:(a)使getAttribute / setAttribute错误,因此它访问属性而不是属性(这就是为什么你不应该在HTML文档中使用这些方法的原因),以及(b)错误地将当前表单状态映射到HTML属性,因此属性确实出现在该浏览器中。

  

但我需要选择=“选中”那里

为什么呢?您是否将表单序列化为innerHTML?这将不包括表单字段值(同样,除了IE中由于错误),因此不是存储字段值的可用方法。

答案 1 :(得分:3)

这可以按预期工作,请查看:http://jsfiddle.net/MZYN7/1/

答案 2 :(得分:1)

应为$('.test').attr('selected', true);​

<option selected>value</option>

它不会显示为selected="selected"