jQuery无法通过元素上的attr()设置“selected”=“selected”?
1 2 3 $('.test').attr('selected', 'selected');
上面的选择框会选择第三个选项作为默认选项而不会出现任何问题。 但是 ,如果使用Firebug检查元素,则所选不存在任何
selected="selected"
属性。
我知道这不是一个大问题,因为它仍然有效,但我需要selected="selected"
,所以我的其他脚本可以捕获它并执行进一步处理。 那里有没有解决方法?
谢谢。
selected
属性与选项的当前选择状态不对应。 selected
属性对应于默认选择,如果在.reset()
上调用.reset()
(或单击type="reset"
按钮.reset()
,则将恢复该属性。 可以使用selected
的DOM属性访问当前选择状态,而在DOM属性defaultSelected
下访问由属性反映的默认选择。
对于 /
value
与defaultValue
相同,并且在type="checkbox"
/ "radio"
上checked
/ defaultChecked
。
jQuery的attr()
被误导命名,它试图假装属性和属性是同样的事情是有缺陷的。 使用attr()
,通常是访问属性, 而不是属性。 因此, $(el).attr('selected', 'selected')
实际上正在执行el.selected= 'selected'
。 这是因为'selected'
和任何非空字符串都是’truthy’:它被转换为el.selected= true
。 但这在任何时候都不会触及selected="selected"
属性。
IE进一步使这种已经令人困惑的情况复杂化:(a)使getAttribute
/ setAttribute
错误,因此它访问属性而不是属性(这就是为什么你不应该在HTML文档中使用这些方法),以及(b)错误地映射当前表单说明HTML属性,因此属性确实出现在该浏览器中。
但我需要选择=“选中”那里
为什么? 您是否将表单序列化为innerHTML
? 这将不包括表单字段值(再次,除了IE中由于错误),因此不是存储字段值的可用方法。
这按预期工作,请查看: http : //jsfiddle.net/MZYN7/1/
它应该是$('.test').attr('selected', true);
也
它不会显示为selected="selected"