Salut à tous,
Je voudrais savoir si c'est possible de faire autrement, je m'explique:
voici un exemple de code html :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
<form action="toto.html" method=post name="formulaire" onsubmit="controle('formulaire')">
Quelles sont vos connaissances de HTML ?
<input type="radio" name="choice" value="1">faibles
<input type="radio" name="choice" value="2">moyennes
<input type="radio" name="choice" value="3">bonnes
<br>
Indiquez votre expertise en programmation:
<input type="radio" name="choice2" value="1">absente
<input type="radio" name="choice2" value="2">moyenne
<input type="radio" name="choice2" value="3">bonne
<P>
<input type="submit" value="Voir le résultat!">
</form> |
j'ai fait une fonction javascript pour controler si l'utilisateur a fait son choix. la voici :
1 2 3 4 5 6 7 8 9 10 11 12
|
function control(formulaire){
for (var i=0;i<document.forms["formulaire"].choice.length;i++) {
if (document.forms["formulaire"].choice[i].checked) {
return true;
}
}
if (document.forms["formulaire"].choice.length == i) {
alert("Vous n'avez pas choisi");
return false;
}
} |
Vous allez me dire, mais où est le souci
. Bah cette fonction ne s'applique que pour les type radio de name "choice". Si je veux l'appliquer aux types radio de name "choice2" faudrait que je fasse un copier coller de mon code javascript et que je change choice en choice2. Et ainsi de suite si j'ai plusieurs pages qui utilisent les types radio, ça devrait etre le bordel. Donc je voulais savoir si je pouvais faire plus simple et plus propre.
Je me suis dit que je pouvais appeler ma fonction en lui passant en argument le nom de mon formulaire ainsi que les names :
control('formulaire','choice','choice2')
Ensuite dans mon javascript, ne sachant pas au prealable combien d'arguments je peux avoir, je fais ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
function control(){
//recupere le 1er argument (nom du formulaire)
var formulaire = control.arguments[0];
//pour chaque name (choice et choice2 par exemple)
for (var i=1; i < control.arguments.length; i++) {
var name = control.arguments[i];
//on parcourt le tableau contenant les valeurs du bouton radio de nom "name".
for (var j=0;j<document.forms["formulaire"].name.length;j++) {
//si une case est cochée, alert et on sort de la boucle (break) mais aussi de la fonction et on return true
if (document.forms["formulaire"].name[j].checked) {
return true;
}
}
//si on arrive ici, ça veut dire que rien n'a été checké donc on retourne false
if (document.forms["formulaire"].name.length == i) {
alert("Vous n'avez pas choisi de methode ");
return false;
}
}
} |
Mais ça ne marche pas, je n'ai pas de message d'erreur. Je pense que le souci vient du faite que je recupere bien les names "choice" et "choice2", mais ce ne sont pas des tableaux, du coup, qd je fais name[j], bah il ne comprend pas que ça veut dire la case numero j des valeurs de name.
Quelqu'un à une idée ou une meilleur façon de faire.
Merci
PS : au début, je ne faisais pas de verification car je pensais que par default, il y avait un choix de fait ou même qu'en rajoutant checked dans le code html ça suffisait, mais sous mac (safari), c'est pas le cas.
Partager