【问题标题】:jQuery: selecting checked checkboxjQuery:选中选中的复选框
【发布时间】:2010-10-19 08:38:45
【问题描述】:

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

【问题讨论】:

  • 嗯,你所拥有的一切都很好,只需在你的选择器周围使用双引号。 :)
  • 是的;请注意,我最初的回答并不是最好的方法。 jQuery 曾经在选择器中出现括号问题,但这个问题已经修复,所以你应该能够保留你所拥有的,只需在选择器周围使用双引号。

标签: jquery checkbox input jquery-selectors


【解决方案1】:

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

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

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

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

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

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

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

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

超级重要的编辑
显然,此错误已修复。您应该能够使用我在上面描述为“理想”的代码。

【讨论】:

  • 我相信,这是错误,它的相关修复:dev.jquery.com/ticket/3443
  • 在 jQuery 1.3.2 中没有修复,它似乎是最新的普遍可用版本。
【解决方案2】:

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

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

【讨论】:

  • 这行不通,很遗憾。 jQuery 解析器在它遇到的第一个 ] 处结束,因此在这种情况下不允许使用 []。
  • 确实如此。这是一个错误;请参阅stackoverflow.com/questions/739695 进行讨论。
  • 一个老错误。如果您显然使用的是最新版本,则已修复,如您所见我的示例所示。
  • 我的评论是关于最新版本的(在撰写本文时:1.3.2)。用于解析 attr 选择器的正则表达式在这个版本中几乎完全被破坏了。也许稍后会修复。
【解决方案3】:

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

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

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

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

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

【讨论】:

  • mumble mumble mumble 如果我错了,我会放弃,但例子就在那里。
  • 触摸,好心的先生。 -1 移除,+1。我已经用这个新发现的知识更新了我的答案。
  • 对不起,我的困惑,我是按照 bobince 几天前在回答中所说的,所以我认为这是当前的事情。下次会自己检查。
  • 哦,说得好。这个问题对话变得相当复杂。
  • 完全没问题。谢谢!
【解决方案4】:

我相信它是这样的:

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

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

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

【讨论】:

  • 不过,[] 可能会磨损 :)
  • #xyz 用于“id”属性,而不是“name”。
猜你喜欢
  • 2015-05-19
  • 2017-01-26
  • 2013-01-23
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 2012-06-29
相关资源
最近更新 更多