【问题标题】:Jquery check all select elements selectedIndex is 0Jquery 检查所有选择元素 selectedIndex 是否为 0
【发布时间】:2015-06-17 23:09:42
【问题描述】:

我有一个日历范围的 4 个选择元素,我想检查使用选择器选择的所有选择元素是否都选择了第一个选项(selectedIndex 为 == 0)。我什至可以检查它们的值是否都不是 "" 但似乎没有任何效果。

<select name="startMonth" class="selCalendar">
 <option value="">Month</option>
 <option value="1">January</option>
 <option value="2">February</option>
 ...
 <option value="12">December</option>
</select>

<select name="startYear" class="selCalendar">
 <option value="">Year</option>
 <option value="1950">1950</option>
 <option value="1951">1951</option
 ....
 <option value="2015">2015</option
</select>

<select name="endMonth" class="selCalendar">
 <option value="">Month</option>
 <option value="1">January</option>
 <option value="2">February</option>
 ...
 <option value="12">December</option>
</select>

<select name="endYear" class="selCalendar">
 <option value="">Year</option>
 <option value="1950">1950</option>
 <option value="1951">1951</option
 ....
 <option value="2015">2015</option
</select>

所以,我只想在它们都具有 selectedIndex == 0 或值为 "" 的情况下进入我的 if 语句。

我尝试过的一些事情

if ( $( ".selCalendar" ).filter('option[value=""]').length )
{
 ...
}

if ( $(".selCalendar option[value='']" ).attr('selected', 'selected').length )
{
 ...
}

if( $( ".selCalendar option:selected" ).index() > 0)
{
 ...
}

if ( $(".selCalendar option:selected").length)
{
 ...
}

我在一个选择中找到了答案,选择了第一个选项,但没有检查所有选择。

任何帮助将不胜感激。谢谢

【问题讨论】:

  • $(".selCalendar").each(function() {}) 将遍历所有选择。
  • @BPercival 如果以下答案之一回答了您的问题,本网站的工作方式,您将“接受”答案,更多信息请点击此处:stackoverflow.com/help/someone-answers。但前提是您的问题确实得到了回答

标签: jquery selector options


【解决方案1】:

这是一个可能的解决方案:

<select name="startMonth" class="selCalendar">
 <option value="">Month</option>
 <option value="1">January</option>
 <option value="2">February</option>
 <option value="12">December</option>
</select>

<select name="startYear" class="selCalendar">
 <option value="">Year</option>
 <option value="1950">1950</option>
 <option value="1951">1951</option>
 <option value="2015">2015</option>
 </select>

<select name="endMonth" class="selCalendar">
 <option value="">Month</option>
 <option value="1">January</option>
 <option value="2">February</option>
 <option value="12">December</option>
</select>

<select name="endYear" class="selCalendar">
 <option value="">Year</option>
 <option value="1950">1950</option>
 <option value="1951">1951</option>
 <option value="2015">2015</option>
</select>

<input type="button" value="Check" id="myButton" />

javascript

$("#myButton").click(function() {
    var isAllBlank = true;
    $(".selCalendar").each(function() {
        if($(this).val() !== "") {
            isAllBlank = false;   
        }
    });

    alert(isAllBlank);
});

JSFiddle Demo

【讨论】:

  • 感谢@Incognito。我会试试的。
【解决方案2】:

尝试使用.is()

var res = $(".selCalendar").is(function(i, el) {
  return el.selectedIndex === 0
});
// do stuff 
// if all `.selCalendar` `selectedIndex === 0` 
if (res) {
  alert("all `.selCalendar` `selectedIndex === 1`")
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select name="startMonth" class="selCalendar">
  <option value="">Month</option>
  <option value="1">January</option>
  <option value="2">February</option>
  <option value="12">December</option>
</select>

<select name="startYear" class="selCalendar">
  <option value="">Year</option>
  <option value="1950">1950</option>
  <option value="1951">1951</option>
  <option value="2015">2015</option>
</select>

<select name="endMonth" class="selCalendar">
  <option value="">Month</option>
  <option value="1">January</option>
  <option value="2">February</option>
  <option value="12">December</option>
</select>

<select name="endYear" class="selCalendar">
  <option value="">Year</option>
  <option value="1950">1950</option>
  <option value="1951">1951</option>
  <option value="2015">2015</option>
</select>

【讨论】:

  • 谢谢,但我不相信所有浏览器版本都支持 .every() 并且不想添加 Polyfill。另外,我不能使用带有回调的东西。
  • @BPercival ".every() 支持所有浏览器版本" 哪些浏览器不支持developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…"can't use something with a callback" 未出现在原始问题中?
  • @BPercival 查看更新后的帖子,用.is() 替换.every()。可以描述_“不能使用带有回调的东西”_?
  • .every 在 IE8 中不受支持。感谢您提供有关 is() 的信息。你是对的,我没有说我不能在问题中使用什么。我应该包括所有我不能使用的东西吗?我也不能对服务器端 php 页面使用 Ajax 请求,如果所有选择都在 selectedIndex 为 0,则返回该页面。
  • @BPercival “在问题中没有说我不能使用的东西。我应该包括我不能使用的所有东西吗?” 是的,如果在js 会帮助解决问题吗? “不能使用 Ajax 请求”? “Ajax”未出现在原始问题中?
猜你喜欢
  • 2018-08-10
  • 2013-05-20
  • 2014-10-15
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多