【问题标题】:jQuery : How to check if NO option was explicitly selected in a select boxjQuery:如何检查是否在选择框中明确选择了 NO 选项
【发布时间】:2012-04-05 17:08:59
【问题描述】:

是否可以检测选择框中是否没有明确选择任何选项?

我已经尝试了这些方法,但它们都不起作用:

<select id="mySelect">
  <option value="1">First</option>
  <option value="2">Second</option>
  <option value="3">Third</option>
  <option value="4">Fourth</option>
</select>

试验一:

alert($('#select option:selected').length); // returns 1

试验 2:

alert($('#select option[selected=selected]').length); // returns 1

试验 3:

alert($('#select option:selected').attr('selected')); // returns 'selected'

有什么想法吗?

【问题讨论】:

  • 您总是会选择一个选项,因为默认情况下它总是会选择页面加载时的第一项。你需要添加一个&lt;option value=""&gt;&lt;/option&gt;,并测试该值是否为空。
  • @Ohgodwhy 我在运行时的选择框中添加了一个 。但它永远不会来自':selected'。 jQuery ':selected' 不考虑动态添加的选项吗?
  • 你猜对了。 Prepend 是在 dom 加载之后添加它,所以第一个选择的项目将是第一个 @ DOM 加载时间的项目。
  • @Ohgodwhy 感谢您的解释!
  • 写这个只是为了好玩,因此分享(您的问题的演示排序测试用例):jsfiddle.net/g3qc9/6 特别喜欢@david 的所有答案,干杯!

标签: javascript jquery select


【解决方案1】:

选择框总是有一个值。如果您不手动更改默认值,您仍然有一个值。如您所说,要检查 显式 更改,您可以监视change

$('#select').change(function() { $(this).data('changed', true); });

那么,你的条件是:

if(!!$('#select').data('changed')) { ... }

实现类似功能的更常见方法是在顶部插入一个占位符值:

<option value="0">Please select one item</option>

...并测试

$('#select').val() == '0'

如果你需要查明select是否已经从原来的值改变了,即上面的测试,但要确保用户没有切换回默认值,你可以简单地在页面加载时存储原来的值:

$('#select').data('original-value', $('#select').val());

并检查

$('#select').val() != $('#select').data('original-value');

【讨论】:

    【解决方案2】:

    这是 normal 选择元素的工作方式:如果没有其他选项设置 selected 属性,则选择第一个选项。最简单的解决方法是添加一个 empty 选项作为第一个选项,如下所示:

    $(function() {
      console.log($("#mySelect").val());
      console.log($("#mySelect").get(0).selectedIndex);
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <select id="mySelect">
      <option value="">-- select an item --</option>
      <option value="1">First</option>
      <option value="2">Second</option>
      <option value="3">Third</option>
      <option value="4">Fourth</option>
    </select>

    然后测试以下条件之一:

    $("#mySelect").val() === "";
    $("#mySelect").get(0).selectedIndex === 0;
    $("#mySelect option:selected").index() === 0;
    

    【讨论】:

    • 这个选项帮助$("#mySelect option:selected").index() == 0在我的特殊情况下略有变化$("#mySelect option:selected").index() &lt;= 0美丽!
    【解决方案3】:

    默认情况下,索引 0 上的任何选项都会被浏览器视为已选择。问题的解决方案是在索引 0 处插入一个虚拟选项,在提交表单之前,您可以使用类似

    的东西来验证它

    if($("#selectBox option").index("option:selected")&gt;0) $("#myForm").submit();

    【讨论】:

      【解决方案4】:

      试试这个:

      <select id="mySelect">
        <option value="1">First</option>
        <option value="2">Second</option>
        <option value="3">Third</option>
        <option value="4">Fourth</option>
      </select><input type="button" id="btncheck" value="check"/>
      

      使用这个 JS:

      $('#btncheck').click(function(){
           if ($("#mySelect ")[0].selectedIndex <= 0) {
                      alert("Not selected");
                  }
          else
              alert("Selected");
      });
      

      ​它会检查你的下拉菜单是否被选中。

      试试这个小提琴:http://jsfiddle.net/aPYyt/

      ​希望对您有所帮助!

      PS:您必须将第一个值设为默认值。

      【讨论】:

      【解决方案5】:
      var $inputs_select_options = $('option:selected');      
      
      // remove empty(first option as default , value=="" ) options:
      $inputs_select_options = $inputs_select_options.filter(function() {
          return this.value.length; //check by length value
      });
      

      【讨论】:

        猜你喜欢
        • 2013-03-17
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 2017-06-11
        • 2019-02-25
        • 2011-01-24
        相关资源
        最近更新 更多