Vérifier si au moins une case est cochée dans checkbox
Bonjour
Je suis débutant en javascript. Je suis en train de faire un formulaire (form1) ou l'utilisateur saisit un tas d'informations (nom, prénom, etc) et ou il y a une série de checkbox pour savoir dans quelle région il exerce principalement.
A la validation du formulaire je fais un :
Code:
onsubmit="return verif_formulaire()"
Et dans la fonction verif_formulaire() je fais une série de tests pour savoir si la saisie est valide. Pour l'instant les tests précédents se passent bien, mais j'ai un problème sur la série de checkbox pour les régions. Je voudrais vérifier qu'au moins une région a été cochée. Mes régions s'appellent id_region_1, id_region_2, etc... Jusqu'à 22.
http://www.merlette.fr/images/regions.jpg
J'ai fait le test sur la valeur id_region_1 (Alsace) avec ces lignes et ça fonctionne :
Code:
1 2 3 4
| if (document.form1.id_region_1.checked == false){
alert("Veuillez entrer la région ou vous exercez principalement");
return false;
} |
Je voudrais maintenant faire le test sur les 22 id_region_. Dans la fonction verif_formulaire() je fais donc le test par l'appel d'une fonction:
Code:
checkbox_selected(22,id_region_);
Voici la fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| function checkbox_selected(nb,idBox)
{
var i;
for (i=1;i<nb;i++)
{
if (document.form1.(idBox+"["+i+"]").checked == true) {
return true;
break;
}
}
alert("Veuillez entrer au moins une région ou vous exercez principalement");
return false;
} |
J'ai cherché dans le forum et j'ai essayé d'adapter mais ça ne marche pas... Je crois qu'il y a une erreur sur cette ligne :
Code:
if (document.form1.(idBox+"["+i+"]").checked == true)
Quelqu'un pourrait il m'aider ?
Merci d'avance !
Fonction verif_formulaire()
La voilà en partie :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| function verif_formulaire()
{
if(document.form1.pseudo.value == "") {
alert("Veuillez entrer votre pseudo");
document.form1.pseudo.focus();
return false;
}
else {
validite('form1','pseudo','A',3,20);
if (probleme == 1) {
document.form1.pseudo.focus();
return false;
}
}
if(document.form1.telephone.value == "") {
if(document.form1.id_contact[0].checked != 1) {
alert("Pour être contacté par téléphone vous devez indiquer votre numéro");
document.form1.telephone.focus();
return false;
}
}
else {
validite('form1','telephone','N',10,10);
if (probleme == 1) {
(document.form1.telephone.value) = "";
document.form1.telephone.focus();
return false;
}
}
if (document.form1.id_pays.value == 0){
alert("Veuillez entrer votre pays de résidence");
return false;
}
if (document.form1.id_ville.value == 0){
alert("Veuillez entrer votre ville de résidence");
return false;
}
checkbox_selected(22,'id_region_')
if ((document.form1.jour_naissance.options[0].selected) && (document.form1.jour_naissance.value == "jour")){
alert("Veuillez entrer votre jour de naissance");
return false;
}
} |
J'ai essayé de faire un focus mais ça ne corrige pas le problème... :(
Code:
1 2 3 4 5 6 7 8 9 10 11
| function checkbox_selected(nb,idBox)
{
var i;
for (i=1;i<=nb;i++)
{
if (document.forms['form1'].elements[idBox+i].checked) return true;
}
alert("Veuillez entrer au moins une région ou vous exercez principalement");
document.form1.id_region_1.focus();
return false;
} |
Donc je résume, si je laisse les régions vides l'alerte s'affiche bien, mais qd je la referme en cliquant sur "ok", ça m'ouvre direct l'alerte suivante sur le jour de naissance.
2 "return false" valent mieux qu'1 ?
Bin oui mais en le retirant ça marche aussi puisqu'il y a déjà un "return false" après l'appel de la fonction... Non ?
Code:
1 2 3 4
| if (! checkbox_selected(22,'id_region_')){
document.form1.id_region_1.focus();
return false;
} |
J'ai retiré le "return false" qui était dans la fonction et apparemment ça marche...
Technique quand tu nous tiens...
Oula ça devient un peu trop technique !
Tout débutant et humble je suis...!
Donc l'appel de la fonction :
Code:
1 2 3 4 5
| if (! checkbox_selected(22,'id_region_')){
alert("Veuillez entrer au moins une région ou vous exercez principalement");
document.form1.id_region_1.focus();
return false;
} |
Et la fonction :
Code:
1 2 3 4 5 6 7 8 9
| function checkbox_selected(nb,idBox)
{
var i;
for (i=1;i<=nb;i++)
{
if (document.forms['form1'].elements[idBox+i].checked) return true;
}
return false;
} |
Ouf...!