我正在使用ASP.Net的下拉帮手,他们就像这样产生HTML:
<select id="mySelect" name="mySelect">
<option>Please Choose</option>
<option value="1">Name A</option>
<option value="2">Name B</option>
<option value="3">Name B</option>
</select>
我想验证此<select>
未在许多地方设置为请选择 <option>
。通常,文本不是请选择,但始终会跳过<option value>
属性作为默认选项。
问题在于,如果您请求value
并且未设置,则会收到option
的文字:
// Gets value as 'Please Choose'
var value = $('#mySelect').val();
// Also gets the value as 'Please Choose'
var value = $('#mySelect option:selected').attr('value');
我想要一个仅在实际填充<option value>
属性时才返回true的检查。
到目前为止,我的最佳解决方案是:
// Check that the value and text of an option are different
var value = $('#mySelect').val();
var selectedOptionText = $('#mySelect option:selected').text();
var check = value != selectedOptionText;
这似乎不太可靠 - 如果我们得到像<option value="1">1</option>
这样的选项,它将永远不会有效。
有没有办法检查<option value>
属性是否为空?
我在这里使用jQuery,但纯粹的Javascript解决方案也会很好。
答案 0 :(得分:2)
我用过这个:
$("#mySelect").change(function(){
if(!$("#mySelect option:selected").is('[value]'))
console.log('no value');
});
答案 1 :(得分:2)
答案 2 :(得分:1)
您可以检查该选项是否具有属性值:
if($('#mySelect option:selected').attr('value')) { ... }
注意:
奇怪的是,对于这种情况,使用一些jQuery版本(适用于v1.9.1),.attr('value') !== [0].value
- &gt; DOM值是指没有值时的文本,但attr
函数返回undefined
。
示例:jsFiddle
编辑:
看起来$('#mySelect option:selected')[0].getAttribute("value")
在几乎情况下会给出null(在FF / Chrome / IE8&amp; 9上测试)。在IE7上,它给出一个空字符串......
答案 3 :(得分:0)
为什么不在默认选项中添加空白值?像这样:
<option value="">Please Choose</option>
然后你可以使用这个jquery:
if($("select").val() === ''){
alert('no item chosen');
}
演示:fiddle