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

use*_*216 8 jquery jquery-selectors

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

$('.test').attr('selected', 'selected');?
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

bob*_*nce 23

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

这同样适用于valueVS defaultValue<input type="text">/ <textarea>checked/ defaultCheckedtype="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中由于错误),因此不是存储字段值的可用方法.