jQuery:选中已选中的复选框

bar*_*art 35 checkbox jquery input jquery-selectors

假设我有以下HTML:

<form id="myform">
  <input type='checkbox' name='foo[]'/> Check 1<br/>
  <input type='checkbox' name='foo[]' checked='true'/> Check 2<br/>
  <input type='checkbox' name='foo[]'/> Check 3<br/>
</form>
Run Code Online (Sandbox Code Playgroud)

现在,如何选择名为'foo []'的已检查输入字段?

这是我的尝试,但它不起作用:

$("#myform input[name='foo']:checked:enabled");
Run Code Online (Sandbox Code Playgroud)

Pao*_*ino 53

字段的名称不是foo,它是foo[].您可以使用attributeStartsWith选择器:

$("input[name^='foo']:checked:enabled",'#myform');
Run Code Online (Sandbox Code Playgroud)

理想情况下,您可以这样做:

$("input[name='foo[]']:checked:enabled",'#myform');
Run Code Online (Sandbox Code Playgroud)

但正如这个答案解释的那样,jQuery使用它来解析条件的value一部分attr=value:

(['"]*)(.*?)\3|)\s*\]
Run Code Online (Sandbox Code Playgroud)

\ 3是包含开头报价的组,奇怪的是允许多个开头报价,或根本没有开盘报价..*?然后可以解析任何字符,包括引号,直到它击中第一个']'字符,结束匹配.反斜杠转义CSS特殊字符没有规定,因此您无法在jQuery中匹配任意字符串值.

换句话说,只要jQuery命中第一个,]它就会认为值已经结束了.所以你坚持使用startsWith或使用纯DOM元素,因为答案也解释了.

SUPER DUPER重要编辑:
显然,这个错误是固定的.您应该能够使用上面描述为"理想"的代码.


Seb*_*Seb 5

您应该在选择时引用该属性并包括[]:

$("#myform input[name='foo[]']:checked:enabled");
Run Code Online (Sandbox Code Playgroud)