这是我的代码:
$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>
我模仿大写和小写,所以如果这可能会影响,你也可以考虑到这一点。 :)
那么,有人能找到我明显缺少的东西吗?
答案 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');
});
注意:请注意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;
});