jQuery:选中已选中的复选框

时间:2009-04-14 13:55:06

标签: jquery checkbox 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>

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

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

$('#myform input[name='foo']:checked:enabled');

4 个答案:

答案 0 :(得分:50)

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

$("input[name^='foo']:checked:enabled",'#myform');

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

$("input[name='foo[]']:checked:enabled",'#myform');

但正如this answer所解释的那样,jQuery使用它来解析value条件的attr=value部分:

(['"]*)(.*?)\3|)\s*\]
  

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

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

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

答案 1 :(得分:5)

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

$("#myform input[name='foo[]']:checked:enabled");

答案 2 :(得分:1)

实际上,你的工作正常,只需使用双引号,并包括括号,以便它可以匹配。

 $("#myform input[name='foo[]']:checked:enabled");

你可以在这里看到它: http://jsbin.com/oyoro

请注意,jQuery在过去使用括号时会出现问题,这可以解释很多关于转义需求的混淆。我知道我已经用括号和引用来解决问题了。

请参阅:http://dev.jquery.com/ticket/3443

答案 3 :(得分:0)

我相信它是这样的:

$("input #foo[] :checked");

编辑: 评论者是对的。我应该第一次回复。 :)这次我要使用“^”。

$("input[name^=foo] :checked");