Page 1 sur 1

Contrôle de saisie

Posté : 27 juil. 2007, 12:35
par laeti
Bonjour,

J'ai un formulaire php avec des boutons radio et des champs texte en fonction du choix d'un bouton radio et des champs doit être rempli. Je sais que je dois faire une fonction javascript. Lors de ma saisie, je rentre dedans mais ça ne fait pas ce que je veux car pour n'importe quel bouton radio sélectionné, elle m'affiche mon message d'alerte.
J'espère avoir été assez clair. Voilà mon code.

Ma fonction JS:

Code : Tout sélectionner

function mini(id){ return document.getElementById(id); } function check_field(){ if(mini('Service_sig_forme').value !='Pas de service attitré' && mini('Serv_sig_nom').value == '' || mini('Serv_sig_nom').value == null) { alert('Vous devez saisir un nom de service SIG'); return false; } return true; }

Mon formulaire:
<FORM action="traitement_saisie2.php" method="POST" name="envoi" enctype="multipart/form-data" onsubmit="return check_field()">
<TD><input id="Service_sig_forme" type="radio" name="Service_sig_forme" value="Service à part entière" checked><font face="Verdana" size="1">Un service à part entière</font></TD>
<TD><font face="Verdana" size="1">Nom du service :</font></TD>
<TD><input id="Serv_sig_nom" name="Serv_sig_nom" type="text" size="50" value="dede"></TD>
			
<TD><input id="Service_sig_forme" type="radio" name="Service_sig_forme" value="Service rattaché à un autre service"><font face="Verdana" size="1">Un service rattaché à un autre service</font></TD>

<TD><input id="Service_sig_forme" type="radio" name="Service_sig_forme" value="Pas de service attitré"><font face="Verdana" size="1">Pas de service attitré</font></TD>
Si quelqu'un a une petite idée, merci.

Posté : 27 juil. 2007, 13:56
par Cyrano
Le problème dans ta fonction vient de ce que tu ne tiens pas compte de ce qu'on nomme "la précédence des opérateurs)

Avec une paire de parenthèses et une remise en forme, tu devrais comprendre le principe général :
function check_field(){
    if(
        mini('Service_sig_forme').value !='Pas de service attitré' && 
        (
            mini('Serv_sig_nom').value == '' || 
            mini('Serv_sig_nom').value == null
        )
    )
    {
        alert('Vous devez saisir un nom de service SIG');
        return false;
    }
    return true;
}
En d'autres termes, tu vérifies deux conditions, mais la seconde contient une alternative, soit "vide" soit "null".

Teste déjà comme ça.

Posté : 27 juil. 2007, 14:10
par laeti
merci de ta réponse mais cela ne change rien. Lorsque je sélectionne 'Pas de service attitré' et que je ne remplis pas le champ 'Nom du service', l'alerte me demande toujours de saisir un nom de service. As-tu une autre idée?

Posté : 27 juil. 2007, 14:14
par béka
fais un rasisonnement inverse alors, fais plutot
function check_field(){
    if(
        mini('Service_sig_forme').value == 'Pas de service attitré' && 
        (
            mini('Serv_sig_nom').value == '' || 
            mini('Serv_sig_nom').value == null
        )
    )
    {
        return false;
    }
    else {
alert('Vous devez saisir un nom de service SIG');
    return true;
    }
}

Posté : 27 juil. 2007, 14:19
par laeti
Ainsi, je ne rentre pas dans le If. Je ne comprends plus rien du tout!! :cry:

Posté : 27 juil. 2007, 14:25
par Cyrano
Il y a un autre problème : il est interdit d'avoir plus d'une fois la même valeur pour un attribut "id" dans une page HTML. Or tes trois boutons radio partagent exactement le même nom.

Corrige en les identifiant Service_sig_forme1, Service_sig_forme2 et Service_sig_forme3 sans modifier la valeur de l'attribut name.

Ensuite, pointe dessus en passant pas le DOM du formulaire : ajoute un attribut id dans ta balise <form>
<FORM action="./" method="POST" name="envoi" id="envoi" enctype="multipart/form-data" onsubmit="return check_field()">
Crée une fonction pour pointer sur les éléments
function form_elt(form, id)
{
    return forms[form].elements[id];
}
Et enfin modifie la fonction de validation:
function check_field(){
    if(
        mini('envoi', 'Service_sig_forme3').checked == true && 
        (
            mini('envoi', 'Serv_sig_nom').value == '' || 
            mini('envoi', 'Serv_sig_nom').value == null
        )
    )
    {
        alert('Vous devez saisir un nom de service SIG');
        return false;
    }
    return true;
}
Re-teste ça... :-k

Posté : 27 juil. 2007, 14:28
par béka
Cyrano, il autait été possible de mettre en id envoi[]

Posté : 27 juil. 2007, 14:30
par laeti
Ok ça marche très bien sans le Id dans envoi.
Merci beaucoup à tous les 2.

Posté : 27 juil. 2007, 14:37
par béka
ben j'ai pas fais grand chose, mais de rien.

PS, pense au tag Mettre résolu. :wink: