Création
d'entreprise
Posez votre question Signaler

Cocher plusieurs checkbox javascript [Résolu]

mohcultiv 48Messages postés 9 février 2007Date d'inscription - Dernière réponse le 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
Lire la suite 

Cocher plusieurs checkbox javascript »

10 réponses
Réponse
+10
moins plus
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].'"/>
Ajouter un commentaire
Réponse
+8
moins plus
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.
Ajouter un commentaire
Réponse
+5
moins plus
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.
Ajouter un commentaire
Réponse
+3
moins plus
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
Ajouter un commentaire
Réponse
+2
moins plus
form.elements[i].name.indexOf('table'+num_table)

et tu remplace name par id?
Ajouter un commentaire
Réponse
+2
moins plus
Oui :)
Ajouter un commentaire
Réponse
+2
moins plus
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...
Ajouter un commentaire
Réponse
+1
moins plus
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.
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
-1
moins plus
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
Ajouter un commentaire
Ce document intitulé « cocher plusieurs checkbox javascript » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?