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

时间:2013-11-12 15:19:26

标签: javascript jquery html backbone.js

这是我的代码:

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

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

<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>

我模仿大写和小写,所以如果这可能会影响,你也可以考虑到这一点。 :)

那么,有人能找到我明显缺少的东西吗?

3 个答案:

答案 0 :(得分:3)

您的代码实际上并没有按照您的想法执行。

它尝试仅将.val()设置为第一个defaultSelected的属性select。此外,select没有这样的属性。 defaultSelected只有在option s(不是select s)时才会成立,如果它们是默认选定的option

以下方法使用.val()作为您的代码(demo jsFiddle here):

$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');
});

请参阅demo for this here

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

答案 1 :(得分:2)

您的代码不太正确。当您致电.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;
});

答案 2 :(得分:1)

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

你想要的是

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