35

假设我有以下 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

4 回答 4

54

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

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

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

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

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

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

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

换句话说,一旦 jQuery 击中第一个],它就认为值结束了。因此,正如该答案所解释的那样,您会被 startsWith 或使用纯 DOM 元素所困扰。

SUPER DUPER IMPORTANT EDIT :
这个错误显然是固定的。您应该能够使用我在上面描述为“理想”的代码。

于 2009-04-14T13:59:11.750 回答
5

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

$("#myform input[name='foo[]']:checked:enabled");
于 2009-04-14T14:01:00.933 回答
1

实际上,你所拥有的一切都很好,只需使用双引号,并包含括号以便它可以匹配。

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

你可以在这里看到它的实际效果:http: //jsbin.com/oyoro

请注意,jQuery 过去曾遇到过括号问题,这可以解释围绕转义需要的许多困惑。我知道我自己在括号和引用方面遇到了问题。

见:http ://dev.jquery.com/ticket/3443

于 2009-04-14T14:06:00.703 回答
0

我相信它是这样的:

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

编辑:评论者是对的。我应该带着我的第一反应走了。:) 这次我将使用“^”。

$("input[name^=foo] :checked");
于 2009-04-14T14:00:39.827 回答