【问题标题】:jQuery Cannot set "selected"="selected" via attr() on <option> elements?jQuery 无法在 <option> 元素上通过 attr() 设置“selected”="selected"?
【发布时间】:2010-09-16 18:45:34
【问题描述】:
<select>
    <option>1</option>
    <option>2</option>
    <option class="test">3</option>
</select>

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

上面的选择框将选择第三个选项作为默认选项,没有任何问题。 但是,如果您使用 Firebug 检查元素,则所选的 &lt;option&gt; 中不存在任何 selected="selected" 属性。

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

谢谢。

【问题讨论】:

    标签: jquery jquery-selectors


    【解决方案1】:

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

    value 上的defaultValue &lt;input type="text"&gt;/&lt;textarea&gt;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 属性,因此属性确实出现在该浏览器中。

    但我需要 selected="selected" 那里

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

    【讨论】:

    • 谢谢。另一个脚本使用当前选择的选项(来自 DOM),或者如果尚未选择任何内容以进行进一步处理,则使用默认选项。阅读您的回复后,为了让该脚本选择当前选择的选项,我想正确的方法是设置 DOM 属性 selected 而不是使用 selected="selected"?
    • 是的。尽管也有一些限制条件,当您设置默认值时,某些浏览器会设置当前值。啊啊!
    • 好吧,其实我之前没有搞过 DOM 属性。对于上面的示例,我应该使用$('.test').val(true); 将第三个选项的selected DOM 属性设置为true?那是对的吗?谢谢。
    • 不,val 访问选项的值,而不是它的选择。在这种特定情况下,value= 属性和 value DOM 属性 相同! (啊!)您可以使用 DOM 属性 selected 设置选择度,因此 $('.test').attr('selected', true)(与名称相反,这不是设置属性!)或 $('.test')[0].selected= true。或者,比使用&lt;option&gt; 元素更实用的方法是直接设置&lt;select&gt; 的值,$('select').val('3')
    【解决方案2】:

    这按预期工作,检查一下:http://jsfiddle.net/MZYN7/1/

    【讨论】:

      【解决方案3】:

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

      还有

      &lt;option selected&gt;value&lt;/option&gt;

      它不会显示为selected="selected"

      【讨论】:

      • 我不认为'selected'属性的值很重要(不一定是真的,它可以是任何值)。只要它存在就足以选择它。
      • @letronje: 是的,但是我只是遵循标准的 jQuery 格式.attr( attributeName, value )
      • 我的意思是 $('.test').attr('selected', 'selected');也有效~> jsfiddle.net/MZYN7/1
      • $('.test').attr('selected', 'selected') 之所以有效,是因为当您将像 'selected' 这样的非空字符串分配给布尔属性时,它的行为类似于 true
      • @bobince thnx,不知道。
      猜你喜欢
      • 2011-02-27
      • 2016-08-10
      • 2013-10-09
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      相关资源
      最近更新 更多