假设我有以下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');
答案 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在过去使用括号时会出现问题,这可以解释很多关于转义需求的混淆。我知道我已经用括号和引用来解决问题了。
答案 3 :(得分:0)
我相信它是这样的:
$("input #foo[] :checked");
编辑: 评论者是对的。我应该第一次回复。 :)这次我要使用“^”。
$("input[name^=foo] :checked");