35 votes

jQuery: sélection de la case cochée

Supposons que j'ai le code HTML suivant:

 <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>
 

Maintenant, comment sélectionner les champs de saisie cochés avec le nom 'foo []'?

Ceci est mon essai, mais cela ne fonctionne pas:

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

54voto

Paolo Bergantino Points 199336

Le nom du champ n'est pas foo, c'est - foo[]. Vous pouvez utiliser le attributeStartsWith sélecteur:

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

Idéalement, vous seriez en mesure de le faire:

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

Mais comme cette réponse explique, jQuery utilise pour analyser l' value de la partie de l' attr=value condition de:

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

\3 étant le groupe contenant de l'ouverture des guillemets, qui bizarrement sont autorisés à être ouverture de plusieurs citations, ou pas de l'ouverture des guillemets à tous. L' .*? alors peut analyser n'importe quel caractère, y compris les citations jusqu'à ce qu'il frappe le premier ‘]' caractère, se terminant le match. Il n'y a aucune disposition pour la barre oblique inverse d'échappement des CSS de caractères spéciaux, de sorte que vous ne peut pas correspondre à une chaîne de caractères arbitraire de la valeur en jQuery.

En d'autres termes, dès que jQuery frappe le premier ] il pense que la valeur est de plus de. Donc, vous êtes coincé avec startsWith ou en utilisant uniquement des éléments du DOM, que cette réponse est-elle explique.

SUPER DUPER IMPORTANT DE MODIFIER:
Ce bug est corrigé, apparemment. Vous devriez être en mesure d'utiliser le code que j'ai décrit comme "idéal", ci-dessus.

5voto

Seb Points 17238

Vous devez citer l'attribut lors de la sélection et inclure [] :

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

1voto

altCognito Points 23944

En fait, ce que vous avez fonctionne très bien, il suffit d'utiliser les guillemets doubles, et inclure les crochets afin de les assortir.

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

Vous pouvez le voir en action ici: http://jsbin.com/oyoro

Notez que jQuery a eu des problèmes sur et en dehors avec des crochets dans le passé, ce qui peut expliquer beaucoup de confusion autour de la nécessité de s'échapper. Je sais que j'ai eu la question moi-même avec des crochets et juste de le citer.

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

0voto

Tacoman667 Points 953

Je crois que ça va quelque chose comme ça:

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

EDIT: Le commentateur a raison. J'aurais dû y aller avec ma première réponse. :) Cette fois, je vais utiliser le "^".

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X