jQuery查看是否选中任何复选框


126

我知道如何查看是否已选中单个复选框。

但是我在以下方面遇到了麻烦-给定表单ID,我需要查看是否选中了任何复选框(即1个或多个),并且需要查看是否未选中任何复选框。基本上,我需要两个单独的函数来回答这两个问题。帮助将不胜感激。谢谢!

实际上,我只需要一个函数来告诉我是否没有选择。知道这一点将回答另一个问题。


Answers:


246

你可以用这样的东西

if ($("#formID input:checkbox:checked").length > 0)
{
    // any one is checked
}
else
{
   // none is checked
}

8
$("#formID input:checkbox:checked").length在这里也足够了
Damon

@Damon我想您的意思是if ($("#formID input:checkbox:checked").length){}(不含>0)就足够了,因为0是一个假值,请参阅james.padolsey.com/javascript/truthy-falsey
Adrien是

11
jQuery关于:checkbox选择器说:For better performance in modern browsers, use [type="checkbox"],请参阅api.jquery.com/checkbox-selector-单选按钮btw,use [type="radio"] rather than :radio api.jquery.com / radio
Adrien是

27

jQuery .is将测试所有指定的元素,如果其中至少一个与选择器匹配,则返回true:

if ($(":checkbox[name='choices']", form).is(":checked"))
{
    // one or more checked
}
else
{
    // nothing checked
}

尽管is()看起来很有效,:checked但按照@rahul的答案指示直接在选择器中似乎更合适。当“内部回调”时,is()似乎更有用,请参阅api.jquery.com/is。还是我错过了什么?
阿德里安

不,这几乎是用文档编写的内容-您检查元素是否与指定的属性匹配。应用它作为过滤器,然后检查结果是否至少有一个是相同的,但是imo更长,并且表达不那么丰富。
Michael Logutov 2014年

+1表示.is(":checked")您的解决方案更具表现力,但不确定其余部分。
阿德里安

$("form input[type=checkbox]").is(":checked")可能是一种更简单,更通用的方法。
阿德里安

@AdrienBe使用它is可能会更好,因为它一发现就会停止。
ChrisW

8

你可以这样做:

  if ($('#form_id :checkbox:checked').length > 0){
    // one or more checkboxes are checked
  }
  else{
   // no checkboxes are checked
  }

哪里:

  • :checkbox 过滤器选择器选中所有复选框。
  • :checked 将选中选中的复选框
  • length 将给出那里已检查的数量

jQuery关于:checkbox选择器说:For better performance in modern browsers, use [type="checkbox"],请参阅api.jquery.com/checkbox-selector
Adrien是

6

这是我用来检查复选框列表中的任何复选框是否已更改的方法:

$('input[type="checkbox"]').change(function(){ 

        var itemName = $('select option:selected').text();  

         //Do something.

});     


3

您可以在.length这里简单地返回:

function areAnyChecked(formID) {
  return !!$('#'+formID+' input[type=checkbox]:checked').length;
}

这将以给定的形式查找复选框,查看是否存在复选框,如果存在则:checked返回true(因为长度否则为0)。为了更清楚一点,这是非布尔值转换后的版本:

function howManyAreChecked(formID) {
  return $('#'+formID+' input[type=checkbox]:checked').length;
}

这将返回检查数量的计数。


3

Rahul的答案最适合您的问题。无论如何,如果您有一组要检查的复选框而不是表单中的所有复选框,则可以进行选择。

为要检查的所有复选框输入一个类名test_check,例如,一个类名,现在您可以通过以下方式检查是否选中了属于该组的任何复选框:

$("#formID .test_check:checked").length > 0

如果返回true,则假定选中一个或多个具有类名的test_check复选框,如果不返回则不选中false

希望它可以帮助某人。谢谢 :)-


1

这是解决此问题的最佳方法。

  if($("#checkbox").is(":checked")){

  // Do something here /////

  };

嗨,欢迎来到StackOverflow。也许您可以再多描述一下您的答案,因为不清楚为什么这是解决问题的“最佳方法”。
dddJewelsbbb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.