Cochez automatiquement des groupes de checkbox

Mammouth du PHP | 1353 Messages

11 déc. 2008, 17:04

Bonjour,

Je ne parviens pas à trouver l'astuce pour que lorsque je clique sur une checkbox un certain nombre d'autres checkbox soit coché.
J'y parviens si je donne un nom propre à chacune, mais avec un nom de type name[] je n'y parviens pas

Code html :

Code : Tout sélectionner

<input type="checkbox" name="chk_Exemple" onclick="switch_check('ss_chk_Exemple')"/> <input type="checkbox" value="1" name="ss_chk_Exemple[]"/> <input type="checkbox" value="2" name="ss_chk_Exemple[]"/>
La fonction js que je n'arrive pas à faire :

Code : Tout sélectionner

function switch_check(name) { for(i=0;i<document.getElementsByName(''+name+).length;i++) //length renvoie 0 :( { document.getElementsByName(''+name).item(i).checked = true; } }
J'ai essayé un for(... in ...) mais pas plus de succès...

Quelqu'un pourrait m'expliquer comment ca fonctionne svp ?

Merci.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 353 Messages

11 déc. 2008, 17:12

bonjour.
Voici comment je fais personnelement :

Code : Tout sélectionner

function reverseSelection(id, bottonId) { if($(id)){ var currentState = $(bottonId).checked; var myform = $(id); var checkboxes = myform.getElementsByTagName('input'); for (var i = 0, matchingInputs = [], length = checkboxes.length; i < length; i++) { var box = checkboxes[i]; if (box.type != 'checkbox') continue; box.checked=currentState ; } } }
Sachant que ID est l'id du formulaire et que bottonId est l'id de l'élément qui va tout inverser.
Cela permet la sélection de tous les éléments, ou leur déselection.

J'avais fait cela vite fait quand j'en avait eut besoin, il doit donc exister de meilleures solutions.

Mammouth du PHP | 1353 Messages

11 déc. 2008, 17:29

Merci,

Mais le problème c'est que du coup cela coche toutes les checkboxes du formulaire et non pas uniquement celles qui ont le nom ss_chk_Exemple[] . Je vais essayer d'adapter mais pour l'instant je suis peu inspiré.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
ViPHP | 3607 Messages

11 déc. 2008, 17:42

Tu peux récupérer tout les élements de type input (getElementsByTagName) et ensuite, tu fait un test sur le name, puis tu fait l'action ou pas...

Mammouth du PHP | 1353 Messages

12 déc. 2008, 15:23

Merci à vous.

Grâce à mes tests suite à vos réponses j'ai pu établir que tout simplement il fallait mettre les [] dans le nom pour que cela fonctionne.

Problème résolu
Tell me and I forget. Teach me and I remember. Involve me and I learn.