检查是否使用jQuery检查了至少一个复选框

时间:2011-12-03 18:28:27

标签: javascript jquery

我有五个复选框。使用jQuery,如何检查是否至少检查了其中一个?

<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">

10 个答案:

答案 0 :(得分:17)

is()可以做到这一点,可以说是is(":checked")唯一可以接受的用途:

  

来自jQuery文档,http://api.jquery.com/is/

     
    

根据选择器,元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定的参数匹配,则返回true。

  
alert($("input[name='service[]']").is(":checked"));
     

示例:http://jsfiddle.net/AndyE/bytVX/1/ (基于Brandon Gano的小提琴)

或者,可能更快,您可以将函数传递给is()

$("input[name='service[]']").is(function () {
    return this.checked;
});

答案 1 :(得分:15)

编辑:此答案中的原始解决方案效率低下,不应使用。请根据此问题的其他答案中的评论和示例查看修订后的解决方案。

原始(坏)解决方案如下:

// DO NOT USE; SEE BELOW
$('button').click(function () {
  var atLeastOneIsChecked = false;
  $('input:checkbox').each(function () {
    if ($(this).is(':checked')) {
      atLeastOneIsChecked = true;
      // Stop .each from processing any more items
      return false;
    }
  });
  // Do something with atLeastOneIsChecked
});

在这个例子中使用.each()是多余的,因为.is()可以直接用在对象集上,而不是手动迭代每个对象。下面是一个更有效的解决方案:

$('button').click(function () {
  var atLeastOneIsChecked = $('input:checkbox').is(':checked');
  // Do something with atLeastOneIsChecked
});

请注意,其中一条评论表明对$(this).is(':checked')非常不喜欢。为了澄清,在您测试一组对象的情况下,is(':checked')没有任何问题。也就是说,在单个项目上调用is(':checked')比在同一项目上调用.checked效率低得多。它还涉及对$ function的不必要的调用。

答案 2 :(得分:11)

这应该可以解决问题:

function isOneChecked() {
    return ($('[name="service[]"]:checked').length > 0);
}

答案 3 :(得分:2)

另一个答案:

!!$("[type=checkbox]:checked").length

!!$("[name=service[]]:checked").length

这取决于你想要什么。

答案 4 :(得分:1)

var checkboxes = document.getElementsByName("service[]");
if ([].some.call(checkboxes, function () { return this.checked; })) {
  // code
}

你想要的是简单的,获取具有名称的所有元素,然后在检查其中一些元素时运行一些代码。

不需要jQuery。

虽然

可能需要旧版浏览器的ES5垫片

答案 5 :(得分:1)

你应该尝试这样....

var checkboxes = $("input[type='checkbox']"),
submitButt = $("input[type='submit']");

checkboxes.click(function() {
submitButt.attr("disabled", !checkboxes.is(":checked"));

});

答案 6 :(得分:1)

您需要检查复选框是否已选中。

$("#select_all").click(function(){
           var checkboxes = $("input[type='checkbox']");
           if(checkboxes.is(":checked"))
               alert("checked");
           else
               alert("select at least one;      

            });

答案 7 :(得分:0)

var atLeastOneIsChecked = $('input[name="service[]"]:checked').length > 0;

答案 8 :(得分:0)

您可以按照以下方式进行操作。最初设置一个变量,假设checkedfalse。如果满足以下条件,则将其设置为true。使用if语句检查变量。请注意:这里的submit是按钮的idmain是表单的ID。

$("#submit").click(function() {
  var checked = false;
  if (jQuery('#main input[type=checkbox]:checked').length) {
    checked = true;
  }
  if (!checked) {
    //Do something
  }
});

答案 9 :(得分:0)

方括号 [] 不是必需的:

var atLeastOneIsChecked = $("input[name='service']:checked").length > 0;

同样适用于您的 HTML,但最好使用 id 来唯一标识每个复选框:

<input id="chk1" type="checkbox" name="service">
<br />
<input id="chk2" type="checkbox" name="service">
<br />
<input id="chk3" type="checkbox" name="service">
<br />
<input id="chk4" type="checkbox" name="service">
<br />
<input id="chk5" type="checkbox" name="service">