最佳方式(使用jQuery)检查未选择空<option> </option>

时间:2013-04-26 08:20:10

标签: javascript jquery html-select

我正在使用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解决方案也会很好。

4 个答案:

答案 0 :(得分:2)

我用过这个:

$("#mySelect").change(function(){
    if(!$("#mySelect option:selected").is('[value]'))
        console.log('no value');
});

工作http://jsfiddle.net/5ht7g/

答案 1 :(得分:2)

使用option[value]仅选择属性为options的{​​{1}}:

value

http://jsfiddle.net/ouadie/tqVUp/

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