【问题标题】:jquery :selected always picks first element if none are selectedjquery :selected 总是选择第一个元素,如果没有被选中
【发布时间】:2018-07-11 18:52:52
【问题描述】:

我有一个选择元素

<select id='bill_to'>
     <option value='a634jhj2'>test@c.com</option>
     <option value='agfd4ghj2'>test2@c.com</option>
     <option value='asdf634jhj2'>tes3@c.com</option>
     <option value='agf2342d4ghj2'>test4@c.com</option>
</select>

如果我这样做了

  $('#bill_to').find(':selected') 

它返回第一个选项,即使它没有被选中。

如果选择了一个选项

  $('#bill_to').find(':selected') 

按预期工作并返回正确的选项

我做错了什么?这是一个错误吗。这真让我抓狂。 如果没有选择任何内容,我只希望它返回 []

【问题讨论】:

  • 默认情况下,选择元素中的第一个选项将被选中。阅读this这会对您有所帮助。
  • 为什么不使用 $('#bill_to').text() 代替?
  • 您可以添加一个像 &lt;option value='0'&gt;&lt;option&gt; 这样的默认值并检查选择的选项值是 !== 0 还是 !== false
  • @Saechel $('#bill_to').text() 的输出将是 ""
  • 但从来没有选择过一个值,这就是他想说的。页面呈现时总是有一个选定的值,除非指定任何其他值,否则它将是第一个值。

标签: javascript jquery html jquery-selectors selected


【解决方案1】:

如果没有带有selected 属性的选择选项,则默认第一个选项将是选中的选项。您可以尝试在顶部添加另一个包含默认值的选项,如下所示。

<select id='bill_to'>
     <option value='-1'>Select<option>
     <option value='a634jhj2'>test@c.com<option>
     <option value='agfd4ghj2'>test2@c.com<option>
     <option value='asdf634jhj2'>tes3@c.com<option>
     <option value='agf2342d4ghj2'>test4@c.com<option>
</select>

如果未选择任何内容,您将获得-1,然后您可以继续。

例如http://jsfiddle.net/fZv5t/

【讨论】:

  • 真的没有别的办法了吗?我在小部件中使用此选择,这将是非常不方便的处理方式
  • 对不起,这是Select的默认行为,你必须这样处理。
【解决方案2】:

我添加了选项“”的结束标记,如果没有这个,我会在下拉列表中的每个选项之后插入一个空选项。这个问题可以在Fiddle.看到

工作示例在此Fiddle.

尝试添加一个空的选项标签:

<select id='bill_to'>
    <option></option>
    <option value='a634jhj2'>test@c.com</option>
    <option value='agfd4ghj2'>test2@c.com</option>
    <option value='asdf634jhj2'>tes3@c.com</option>
    <option value='agf2342d4ghj2'>test4@c.com</option>
</select>

这里你会得到空字符串,像这样:

$('#bill_to').find(':selected').val();

【讨论】:

    【解决方案3】:

    如果您不能或不想先添加一个虚拟&lt;option&gt;,作为替代方案,您可以抓取并测试:selected 返回的元素的选定属性,例如:

    var selection = $('#bill_to').find(':selected');
    var really = (selection.attr('selected') != null);
    var selval = really ? selection.val() : "";      /* or null or whatever */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2015-10-26
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多