jQuery:取消选择select元素中的选项
jQuery: unselect option in select element
我遇到了select元素的一个奇怪行为。因此,我有一个带有多个选项的select元素。其中一个选项为空-插件需要它来输出占位符。
我需要清除所选选项的功能,我写了这样的东西:
$(element).val('');
$(element).find("option:selected").removeAttr("selected");
问题是"selected"属性仍然在这里,它在旧选项上——您可以在代码示例中看到它。
所以,我有两个问题:
1( 为什么jQuery库的.val((方法不更新选项列表中的"selected"属性?
2( 为什么我不能在我的情况下更新"选定"属性?如果我切换这些语句,它就起作用了:
$(element).find("option:selected").removeAttr("selected");
$(element).val('');
代码示例:
$(function(){
$("#unselect").click(function(){
$("#lang_type").val('');
$("#lang_type").find("option:selected").removeAttr("selected");
alert($("#lang_type").html());
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="lang_type">
<option value=""></option>
<option value="01">01 - Language of text</option>
<option value="02">02 - Original language of a translated text</option>
<option selected="selected" value="03">03 - Language of abstracts</option>
<option value="04">04 - Rights language</option>
<option value="05">05 - Rights-excluded language</option>
<option value="06">06 - Original language in a multilingual edition</option>
<option value="07">07 - Translated language in a multilingual edition</option>
<option value="08">08 - Language of audio track</option>
<option value="09">09 - Language of subtitles</option>
</select>
<button id="unselect">Unselect</button>
编辑:你可以像这个一样使用prop(false)
属性
$(function(){
$("#unselect").click(function(){
$("#lang_type").val('');
$("#lang_type").find("option:selected").prop('selected',false);
});
});
正如@yezzz所说,请阅读以下内容:
注意:不要使用removeProp((方法删除本机属性,如checked、disabled或selected。这将完全删除该属性,一旦删除,就不能再添加到元素中。请使用.pr((将这些属性设置为false
如果我没有错的话,多选最初可以取消选择,但一旦选择了任何选项,就不能再取消选择了。RFC 1866在第8.1.3节中规定:
初始状态会选择第一个选项,除非任何元素上都存在selected属性。
这让我相信,必须始终选择一个选项。显然,不同的浏览器对此有不同的解释。。。
但这似乎不是jQuery的问题,而是浏览器实现的问题。
selected
属性仅反映选择输入的初始状态。你不应该真的关心删除它,因为一旦选择了不同的选项(无论是用户还是页面上的脚本(,它都不会产生任何影响。
输入的当前状态可以通过selectedIndex
属性读取或修改,其中-1
的值意味着没有选择任何选项(这从来都不是默认值,因为最初总是选择一个选项(。但是,您似乎想要选择一个特定的"空"选项。在选择框上设置值会导致选择相应的选项,在您的情况下,这是第一个选项。
代码可能正是您想要的。因此,不要介意检查HTML,因为selected
属性与输入的当前状态无关。
但是,:selected
选择器与当前所选的元素相匹配。您的第一个代码段选择了一个选项,从而使其成为:selected
,然后尝试从中删除一个不存在的属性。您的第二个代码段假设该选择保留在最初选择的选项上,然后从中删除该属性。接下来是"空"选项被选中,无需采取更多步骤,因为这就是选择选项所需的全部内容。
总之:您可以安全地删除所有涉及删除selected
属性的代码,因为它不会影响元素的当前状态,该状态已经绑定到正确的选项。
- 根据select选项元素将表单重定向到不同的URL
- 只有当Angular从资源对象检索数据时,才选择选项元素
- jQuery 隐藏选项元素
- 根据选择选项元素将表单重定向到不同的URL,并在电子邮件中获取表单详细信息
- 无法在 IE 中设置选项元素的属性
- 选择/选项元素中的javascript事件OnKeyUp根本不起作用
- 如何知道选项元素是否设置了值属性
- JavaScript - 有没有更有效的方法来创建选项元素
- 如果我通过 Javascript 更改<选项>元素上的属性“选定”会发生什么
- 更改动态添加的选择选项元素的名称
- 尝试从选项元素获取 HTML
- 为什么 Chrome 在使用后退按钮后不显示选定的<选项>元素
- AngularJS在有效的ajax数据到达之前设置伪选项元素
- 如何在jQuery中获取选中的选项元素attr
- 你能在选项元素上设置点击事件吗?(Angular v2.0.0-beta.0)
- 事件外选项元素的Meteor值
- sort选择选项元素
- 在IE中使用.innerHTML添加选项元素无效
- select2.js-如何在选项元素内对齐两个项目
- 在IE中使用. innerhtml添加选项元素