Controler le nombre de checkbox cliquees

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 327 fois - Téléchargée 27 fois

Contenu du snippet

Pour expliquer ce code, je vais prendre un exemple:
Il y a des checkbox dans un formulaire, et vous ne voulez pas que l'utilisteur coche plus de X checkbox.
Cette source permet de controler qu'il n'en clique pas plus, et de transférer ce qu'il a cliqué à un script php.

Source / Exemple :


<script language="javascript">
<!--
//nb max de choix possible
var nbre_max=3;
var nbre=0;
var url = new Array(nbre_max+1);
function checkbox(num){
	if((document.form.list_check[num].checked)==true){
		nbre++;
	} else {
		nbre--;
	}
	if(nbre > nbre_max){
		alert('Pas plus de 3 ateliers !');
		document.form.list_check[num].checked=false;
		nbre--;
	}
}
function verif(){
	if(nbre==0) {
		alert('Choisis un checkbox !');
		document.form.list_check[0].focus();
	} else {
		for(y=0; y<document.form.list_check.length; y++){
			if(document.form.list_check[y].checked == true){
				str = str + "&check[]=" + y;	
			}
		}
		str=str.substring(1,str.length);
		document.form.action = "action.php?" + str;
		document.form.submit();
	}
}
//-->
</script>
<!-- ... //-->
<form name="form" method="POST">
<input type="checkbox" name="list_check" value="0" OnClick="checkbox(0);" />1er choix
<input type="checkbox" name="list_check" value="1" OnClick="checkbox(1);" />2eme choix
<input type="checkbox" name="list_check" value="2" OnClick="checkbox(2);" />3eme choix
<input type="checkbox" name="list_check" value="4" OnClick="checkbox(4);" />4eme choix
<!-- ... //-->
</form>

//pour récupérer les données (action.php):
<?php
$array=array('1er choix','2eme choix','3eme choix','4eme choix','...');
$passage=$_GET['check'];
for($i=0;$i<count($check);$i++){
    $check[$i]=$array[$passage[$i]];
}
?>

Conclusion :


Et voilà.
la variable $check dans le code PHP contiendra (p.ex):
0 => '1er choix';
1 => '3eme choix';
2 => '4eme choix';
...

Je sais que cette source est aussi du PHP, mais le coeur (les checkbox) est en javascript. De plus, vous pouvez toujours récupérer le tableau de variables avec Javascript ou avec un autre langage (ASP ...) .

A voir également

Ajouter un commentaire

Commentaires

kiadimoundi
Messages postés
4
Date d'inscription
vendredi 22 décembre 2006
Statut
Membre
Dernière intervention
30 décembre 2008

bon, il est 9h12, j'ai peut être pas les yeux en face des trous, mais ton code me parait bizarre, surtout lors de la récupération des variables, je m'explique :
<form name="form" method="POST">
....
$passage=$_GET['check'];
-->>> ca serait pas plutot $passage=$_POST['check']; ou alors <form name="form" method="GET"> ?????

ensuite dans le $_GET["..."], tu appelles une variable check, elle vient d'où ??? tu voulais plutot dire list_check ?

Au dela de ces deux détails, le code est très intéressant !!!:-D :-D
jdeheyn
Messages postés
23
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
14 janvier 2010

Yes MONSIEURZOUZOU, ton code est plus simple à comprendre, mais je trouve qu'il ne va pas trop bien pour la création "dynamique" de formulaires, en PHP. Le fait de devoir utiliser des champs avec des noms "spécifiques" : r1, r2, r3, ... Je savais pas trop comment les traiter. Or avec le code de Samiby, on récupère les valeurs dans un tableau, ce que je trouve plus facile à manipuler ensuite en PHP.
monsieurzouzou
Messages postés
14
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
17 mai 2007

et désolé pour la faute de frappe: cpde = code si un modo passe par là, ça serait bien de rectifier parce que c'est très vilain :) ça m'apprendra à faire genre je sais taper
monsieurzouzou
Messages postés
14
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
17 mai 2007

euh le cpde que j'ai collé (honteusement pompé je le rappelle) est quand même un peu plus simple...
jdeheyn
Messages postés
23
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
14 janvier 2010

J'ai trouvé une parade (merci bultez) pour cette erreur "'documen.form.list_check[...].checked' a la valeur Null ou n'est pas un objet."

En fait elle ne se pose que lorsqu'il n'y a qu'une case à cocher. Dans ce cas l'utilisation de 'document.form.list_check[num]' n'est pas possible.
Il suffit alors d'ajouter une "case invisible". Dans mon cas j'ai rajouté un champ de formulaire invisible : .

Donc le nouveau code de Samiby devient :

<script language="javascript">
<!--
//nb max de choix possible
var nbre_max=3;
var nbre=0;
var url = new Array(nbre_max+1);
function checkbox(num){
if((document.form.list_check[num].checked)==true){
nbre++;
} else {
nbre--;
}
if(nbre > nbre_max){
alert('Pas plus de 3 ateliers !');
document.form.list_check[num].checked=false;
nbre--;
}
}
function verif(){
if(nbre==0) {
alert('Choisis un checkbox !');
document.form.list_check[0].focus();
} else {
for(y=0; y<document.form.list_check.length; y++){
if(document.form.list_check[y].checked == true){
str = str + "&check[]=" + y;
}
}
str=str.substring(1,str.length);
document.form.action = "action.php?" + str;
document.form.submit();
}
}
//-->
</script>
<!-- ... //-->
<form name="form" method="POST">

1er choix
2eme choix
3eme choix
4eme choix
<!-- ... //-->
</form>
//pour récupérer les données (action.php):
<?php
$array=array('1er choix','2eme choix','3eme choix','4eme choix','...');
$passage=$_GET['check'];
for($i=0;$i<count($check);$i++){
$check[$i]=$array[$passage[$i]];
}
?>

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.