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

Kat*_*ntz 11 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[]">
Run Code Online (Sandbox Code Playgroud)

And*_*y E 17

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

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

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

alert($("input[name='service[]']").is(":checked"));
Run Code Online (Sandbox Code Playgroud)

示例:http://jsfiddle.net/AndyE/bytVX/1/(基于布兰登加诺的小提琴)

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

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


Bra*_*ano 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
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 显然,代码可以编写得更清晰.但是,这并不能使这个答案不正确.这种贬低行为是荒谬的,并且是消极的.在没有解释的情况下贬低"不那么好"的答案毫无意义. (7认同)
  • 如果我看到`$(this).is(':checked')`,我会把开发人员带回来并跟他说些话. (2认同)
  • 为什么这个答案如此大规模地被否决?如果有任何问题,请在评论中说明为什么会出现这种情况。 (2认同)

jab*_*lab 12

这应该做的伎俩:

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