假设我有以下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');
解决方法
该字段的名称不是foo,它是foo []。你可以使用
attributeStartsWith选择器:
$("input[name^='foo']:checked:enabled",'#myform');
理想情况下,您可以这样做:
$("input[name='foo[]']:checked:enabled",'#myform');
但是正如this answer解释,jQuery使用它来解析attr = value条件的值部分:
(['"]*)(.*?)\3|)\s*\]
\3 being the group containing the opening quotes,which weirdly are allowed to be multiple opening quotes,or no opening quotes at all. The .*? then can parse any character,including quotes until it hits the first ‘]’ character,ending the match. There is no provision for backslash-escaping CSS special characters,so you can’t match an arbitrary string value in jQuery.
换句话说,一旦jQuery命中第一],它认为价值已经结束。所以你被困在了startsWith或使用纯DOM元素,因为这个答案也解释了。
SUPER DUPER重要编辑:这个bug是固定的,显然。你应该能够使用我描述为“理想”的代码,上面。