我用谷歌搜索并尝试了很多方法来做到这一点,但到目前为止我都无法工作。我正在寻找的很简单:我希望能够判断下拉列表是否具有选定值。问题是selectedIndex,:selected,val()等确实返回以下情况的结果:
<select>
<option value="123">123</option>
<option value="234">234</option>
</select>
显然,浏览器会显示此下拉列表并选择123选项,但只会选择它,因为没有其他选项,实际上这个下拉列表没有选中的值,因为没有“selected”属性。所以基本上我试图找到如何区分上述下拉列表
<select>
<option selected value="123">123</option>
<option value="234">234</option>
</select>
答案 0 :(得分:19)
var hasValue = ($('select > [selected]').length > 0);
可替换地,
var hasValue = $('select').has('[selected]');
答案 1 :(得分:2)
快速解决方案:
<select>
<option selected></option>
<option value="123">123</option>
<option value="234">234</option>
</select>
然后看看你是否有.val()
答案 2 :(得分:1)
批准的答案对我来说似乎不起作用。
以下是检查是否选择了所有选项的方法:
if($('select option:selected').length > 0) {
/* Do your stuff here */
}
答案 3 :(得分:0)
据我所知,你的两个例子没有功能上的区别。基本上,浏览器会自动选择第一个option
。
例如,参见
的结果$('option:selected')
关于你的第一个例子。
如果您真的想要防止这种情况发生,您有两种选择。第一个是根据Jason的回答在select
中引入一个新的空元素。另一种选择是取消选择自动选择的值:
$(document).load(function(){
$('option:selected').attr('selected', false);
});
这清除了选择。因此,$('select').val()
不是空字符串的任何结果都将由用户进行更改。
答案 4 :(得分:-1)
这应该有效:
if($('#mySelect').find('[defaultSelected]').size()>0){/*do your stuff*/}