jquery .prop('defaultSelected') 似乎在 IE9 中出现故障

jquery .prop('defaultSelected') seems to malfunction in IE9

本文关键字:IE9 故障 prop defaultSelected jquery      更新时间:2023-09-26

这是我的代码:

$selects = $('select');
$selects.val( $selects.prop('defaultSelected'));

它应该重置我所有选择元素的值,但它不能在 IE9 中仅与我的一个元素正常工作。它们之间的唯一区别是我在 html 文件中硬编码的这个,其余的都是用 backbone 渲染的(虽然结构相同!标记:

<label>
    <span class="heading">Heading</span>
    <select name="someStatus">
        <option value="Val1" selected="selected">Val2</option>
        <option value="Val2">Val2</option>
        <option value="Val3" >Val3</option>
    </select>
</label>

我模仿了大写和小写,所以如果这会影响,你也可以记住这一点。 :)

那么,谁能找到我明显缺少的东西?

你的代码实际上并没有做你认为它做的事情。

它尝试仅将第一个select的属性defaultSelected设置为.val()。此外,select没有这样的属性。 如果option秒(不是 select 秒)是默认选择的option,则defaultSelected仅适用于 秒。

以下方法使用 .val() 作为您的代码(此处演示 jsFiddle):

$selects.val(function () {
    return $(this).find('option').filter(function () {
        return $(this).prop('defaultSelected');
    }).val();
});

如果您更喜欢使用.prop()或者如果您有<select multiple>,则应使用:

$selects.find('option').prop('selected', function () {
    return $(this).prop('defaultSelected');
});

请参阅此处的演示

注意:请记住defaultSelected可以通过编程方式更改,因此请确保您知道代码的边界。

你的代码不太正确。当您调用 .val() 时,它会将您传入的单个值应用于所有元素。您可能希望:

$selects.val(function() { return $(this).prop('defaultSelected'); });

在您的代码中,您获取了集合中第一个<select>元素的"defaultSelected"属性。 该属性值用于设置所有<select>元素,因此没有具有该值的选项的元素不会受到影响。 通过传递一个函数,你告诉jQuery询问对列表中的每个函数使用什么值。 上面的函数只是依次获取每个元素的"defaultSelected"属性。

编辑 — 此外,正如@Bergi在评论中指出的那样,"defaultSelected"属性位于<option>元素上,而不是<select>元素上,因此您必须找到正确的元素:

$selects.val(function() {
  return $(this).find('option[selected]').val() || undefined;
});

.defaultSelected(就像.selected一样)是每个<option>元素的属性,而不是<select>的属性!因此,您的代码会将值设置为 undefined

你想要的是

$selects.find("option").prop("selected", function() {
    return this.defaultSelected;
});