Cocher plusieurs checkbox javascript

Résolu/Fermé
mohcultiv Messages postés 48 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 19 juin 2007 - 15 mars 2007 à 12:44
 sa9rsous - 27 juin 2010 à 13:01
salut,
je dois cocher plusieurs case a cocher contenu dans une table en cochant celle qui se trouve en en-tete. Par contre j'ai plusieurs tables.
j'ai essayer ceci:

function clicTous(form,booleen)
{
for (i=0, n=form.elements.length; i<n; i++)
if (form.elements[i].name.indexOf('case') != -1)
form.elements[i].checked = booleen;
}

avec:

<input type="checkbox" onClick="if (this.checked) { clicTous(this.form,true) } else { clicTous(this.form,false) };">

ca marche mais le souci c'est qu'il me coche toutes les cases presentes sur le formulaire, et pas seulement ceux de la table en question.

j'ai essayer autre chose avec getelementbyid() avec le meme id pour chaque case d'une meme table:

function activdesactiv(){
var t,arg=activdesactiv.arguments;
t=arg[0];
if (document.getElementById(t).checked==false){
document.getElementById(t).checked=true;
} else {
document.getElementById(t).checked=false;
}
}

avec:

onclick="activdesactiv('id');"


ca marche aussi mais là il ne me coche que la premiere cases



est ce que quelqun aurait une solution.

merci
A voir également:

10 réponses

Encore mieux !!!


fonction js :

function selectAll($nbTotal,baseId,etat) {
	
	for(i=1;i<=$nbTotal;i++) {
		document.getElementById(baseId+i).checked = etat;
	}
}



la case pour tout cocher ou "$arr_nbGrp[0]" correspond à votre nombre total de case à cocher

<input type="checkbox" onClick="selectAll('.$arr_nbDep[0].',\'checkDep\', this.checked);" >


et enfin les case à cocher générer par une boucle

<input type="checkbox" name="checkDep'.$arr_liste[depid].'" id="checkDep'.$arr_liste[depid].'" value="'.$arr_liste[dep_value].'"/>
10
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
15 mars 2007 à 12:51
Bonjour,

Un "id" est forcément unique. Tu n'as pas le droit d'avoir plusieurs éléments qui ont le même id dans ta page, c'est pour ça qu'il n'a utilisé que le premier.
Par contre, tu peux rajouter un chiffre derrière l'id.
Par exemple, les id de tes checkbox pourraient être :
id="table1_chk1"
id="table1_chk2"
id="table1_chk3"
id="table1_chk4"
id="table2_chk1"
id="table2_chk2"
id="table2_chk3"
id="table2_chk4"

En faisant comme ça, tu peux reprendre la même méthode que précédemment :
function clicTous(form,booleen,num_table)
{
for (i=0, n=form.elements.length; i<n; i++)
if (form.elements[i].name.indexOf('table'+num_table) != -1)
form.elements[i].checked = booleen;
}

Avec l'argument "num_table" le numéro de ta table. Tu peux l'adapter comme tu veux, mais ça devrait fonctionner.
8
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
15 mars 2007 à 14:12
Tu peux conserver tes attributs "name", mais utiliser comme je te l'ai dit les attributs "id" pour les différencier les unes des autres.
5
mohcultiv Messages postés 48 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 19 juin 2007 8
15 mars 2007 à 14:10
Merci pour ta réponse.
J'avais déja envisagé cette solution, en fait tu personalise le nom de tes checkbox en fonctions de la table.
Le souci c'est que les noms de mes checkbox sont tous de la forme indic + i ou i est incrémenté (indic1, indic2,..). Cela est plus facile pour moi afin de récuppérer la valeur de mes checkbox sur une autre page.
donc je ne peux pas personaliser les noms des cases en fonctions de leur tables, et donc toutes mes cases vonte etre cochés en meme temps.

merci encore
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mohcultiv Messages postés 48 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 19 juin 2007 8
15 mars 2007 à 14:23
form.elements[i].name.indexOf('table'+num_table)

et tu remplace name par id?
3
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
15 mars 2007 à 14:24
Oui :)
2
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
15 mars 2007 à 14:52
Je ne connais pas bien l'Asp...

A priori, ce serait plutôt la deuxième solution qui serait la bonne :

onclick="clicTous(this.form,true,<%response.write(nbf)%>)"

Quand tu fais ça, ça ne marche pas, mais quel est le code source côté navigateur ? Pour voir si la bonne valeur a bien été donnée par le serveur...
2
mohcultiv Messages postés 48 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 19 juin 2007 8
15 mars 2007 à 15:18
non en fait ca marche la bonne valeur à été donnée , c juste que dans le id j'avais mal orthographier.
je te remercie pour tous et d'avoir répondu aussi rapidement.
salut.
1
for ( i = 0 ; i < oForm.elements.length ; i++ ) {
oElement = oForm.elements[i] ;
// tagName permet de connaître le nom de l'élément
// Je ne m'intéresse qu'aux <input> de type checkbox
// Les .toLowerCase( ) me permettent d'être insensible à la casse
if ( oElement.tagName.toLowerCase( ) == "input" ) {
if ( oElement.type.toLowerCase( ) == "checkbox" ) {
// La propriété checked est à true si la checkbox est cochée
if ( oElement.checked == true ) {
n++ ;
}
}
}
}
return n
1
mohcultiv Messages postés 48 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 19 juin 2007 8
15 mars 2007 à 14:46
ok je te remercie mais g encore une question.
en fait mon num table est un entier "nbf" que j'incrémente en asp
donc lorsque j'appele la fonction dans le onclick je suis obligé de le spécifier. si je fais
onclick="clicTous(this.form,true,nbf)"
ca marche pas et si je fais
onclick="clicTous(this.form,true,<%response.write(nbf)%>)"
ca marche pas non plus alors comment faire?

merci
-1