是否已使用Jquery为select选项设置了selected属性?

时间:2014-12-29 14:13:10

标签: jquery forms attr

我正在尝试找出用户是否已经在选择框中选择了一个选项(在提交表单之后),如果他没有选择。

示例:

<select>
 <option value="foo">foo</option>
 <option value="bar">bar</option>
</select>

(/ \用户未选择任何内容)

<select>
 <option value="foo">foo</option>
 <option selected="selected" value="bar">bar</option>
</select>

(/ \用户在提交表单之前选择了一个选项)。

我一直在尝试(全部使用jQuery):

$(this).attr('selected');
// returns true or false, regardless of whether the selected has explicitly been set

$(this).prop('selected');
// return 'Uncaught TypeError: undefined is not a function'

$(this).is(':selected');
// returns true or false, regardless of whether the selected has explicitly been set

if( typeof( $(this).attr('selected') ) != 'undefined' ) {
// returns true or false, regardless of whether the selected has explicitly been set

简而言之:如何检查选项元素上是否存在selected =“selected”'thing'?

3 个答案:

答案 0 :(得分:1)

您可以使用以下语句检查是否选中了特定选项

$("select option:selected").length>0 //if that option is selected

<强>更新

$("select option[value = '*value goes here*']:selected").length>0 //if that option is selected

UPDATED FIDDLE

答案 1 :(得分:0)

这样的事情对你有用:

$('#mySelect').on('change',function() {
    if($('#mySelect option:selected')) {
    alert("selected: "+ $('#mySelect').val());
}
});

http://jsfiddle.net/aLmr7g19/

答案 2 :(得分:0)

如果您使用以下html ...

&#13;
&#13;
<select>
  <option value="foo">foo</option>
  <option value="bar">bar</option>
</select>
&#13;
&#13;
&#13;

...问题是默认情况下会选择第一个选项。

因此,您无法知道用户是否真的想要选择该选项,或者是否跳过它并且没有选择任何内容。

相反,建议使用以下内容:

&#13;
&#13;
select > .placeholder{
    display: none;
}
&#13;
<select>
  <option value="" class="placeholder" selected disabled>
    Select an option...
  </option>
  <option value="foo">foo</option>
  <option value="bar">bar</option>
</select>
&#13;
&#13;
&#13;

然后,要知道用户是否选择了一个选项,检查value就足够了:

!!mySelect.value;    // If the user hasn't chosen any option,
                     // `mySelect.value === ''` in vanilla-js

!!$(mySelect).val(); // If the user hasn't chosen any option,
                     // `$(mySelect).val() === null` in jQuery 1.8.3+
                     // `$(mySelect).val() === ''` in previous jQuery