Vérification de groupe de radio buttons

[Résolu]
Signaler
Messages postés
38
Date d'inscription
lundi 15 septembre 2003
Statut
Membre
Dernière intervention
24 novembre 2008
-
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
-
Bonjour,


Je coincé sur une bêtise, je ne vois pas trop comment appréhender le problème.


En PHP, j'ai un formulaire qui ressemble à ceci. Le nombre de lots peut varier et table est construite dynamiquement.


<form action="form.php" method="post" name="mesOrdres">
LOT 1,
TEL,
MONTANT,
CANCEL,

----

,
,
&euro;,
,

----

LOT 2,
TEL,
MONTANT,
CANCEL,

----

,
,
&euro;

</form>


Ce que je voudrais, c'est lorsqu'on sauve le formulaire, on vérifie, dans le cas ou le radio "MONTANT" est coché, que la zone "PRIX" soit également remplie et empêcher le submit si ce n'est pas ok.


Comment puis-je faire cela ?


Merci d'avance pour votre aide !

7 réponses

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour,

Plusieures ERREURs dans ton code, la
plus importante c'est la logique de tes tests !!!!

La façon de récupérer
les name de tes boutons n'est pas au top non plus.

Une autre plus
sournoise et que quand tu mets des radio
button l'objet retourné est un tableau contenant tout les radio button d'un même name, liés entre eux par ce name justement, donc tu ne peux pas écrire radio.checked mais radio[1].checked par exemple.

Un exemple de ce à quoi pourrait ressembler ta fonction...
//-----------------
function Verif(tot){

 //-- Recup Objet FORM
  var O_Form =
document.mesOrdres;
  //-- Parcours

  for( var i = 0; i < tot; i++){
     //-- Recup des Names
    var szRadio = "ordre"
+( i+1) +"[]";
    var szPrix = "prix" +( i+1) +"[]";
     //-- Recup des Objets
    var O_Radio =
O_Form[szRadio];
    var O_Prix = O_Form[szPrix];

     //-- Test Radio Montant
    if(
O_Radio[1].checked){
      //-- Test si champ vide

      if( O_Prix.value == ""){
        alert( "Veuillez
compléter le prix !")
        //-- Met le focus sur
le champ
        O_Prix.focus();
         //-- Return FALSE
        return( false);

      }
      else{
        //-- Test si Not
a Numeric
        if (isNaN( O_Prix.value)){

          alert("Veuillez indiquer un nombre !")
          //-- Efface la valeur
          O_Prix.value
="";
          //-- Met le focus sur le champ

          O_Prix.focus();
        //--
Return FALSE
          return( false);
        }
      }

    }
  }
}
Il y a des points améliorables, mais bon...

;O)
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour,
<table bgcolor="#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, dans le cas ou le radio \"MONTANT\" est coché,
que la zone \"PRIX\" soit également
remplie</td>
</td></tr></tbody></table>Pourquoi
utiliser un radio MONTANT ?
Il te suffit de vérifier avant de submiter ta
FORM, que le champ prix est renseigné.

<table bgcolor="#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, empêcher le submit si ce n'est pas
ok</td>
</td></tr></tbody></table>Si ce champ
n'est pas renseigné alors la fonction affectée au submit, absente dans ton cas,
retourne false

Nota :
 ne
pas oublier de faire les vérif coté PHP, si javascript désactivé...
;O)
Messages postés
38
Date d'inscription
lundi 15 septembre 2003
Statut
Membre
Dernière intervention
24 novembre 2008

Bonjour,

En fait, au niveau du look de la page, je n'ai pas le choix, il m'est imposé. De fait, je suis obligé d'utiliser des radios ...

Au niveau PHP, je l'ai déjà programmé mais c'est la partie javascript qui me pose problème, j'aurais voulu offrir cette possibilité avant le submit du form ...

Christophe
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour,
<table bgcolor= "#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, suis obligé d'utiliser des
radios</td>
</td></tr></tbody></table>bon soit...

il te faut créer une fonction de vérification de ton formulaire, dans
laquelle tu testeras que si le radio MONTANT
est coché l'input PRIX correspondant est non
vide ou plus exactement non vide et est un nombre, si c'est bon la fonction
return( true) dans le cas
contraire la fonction return(false).
Ne pas omettre de mettre sur le submit de la
form return( Fct_Verif();)

Entre nous...
Tu peux également mettre le disabled du radio
à true si le champ est correct, comme cela
tout le monde est content.
<table bgcolor ="#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, je n'ai pas le choix, il m'est
imposé</td>
</td></tr></tbody></table>demandes à
celui qui t'impose cela si lorsqu'il va parler il vérifie que sa bouche est
ouverte ou si elle s'ouvre automatiquement quand il parle !
;O)
Messages postés
38
Date d'inscription
lundi 15 septembre 2003
Statut
Membre
Dernière intervention
24 novembre 2008

Merci pour ton aide.

Mais je dois louper quelque chose ...

Voici le test que j'essaie de faire. Je ne pige pas ce que je fais mal ...

Verif(tot) {
for (var i=0;i<tot;i++) {
            mon = "document.forms[0].ordre" + i
            prx = "document.forms[0].prix" + i
            if (mon.value == "montant" && prx.value != "") {
                alert("oui")   
            } else {
                alert("non")   
            }
        }
}
Messages postés
38
Date d'inscription
lundi 15 septembre 2003
Statut
Membre
Dernière intervention
24 novembre 2008

J'ai mal collé le code :

for (var i=0;i<tot;i++) {
            a = "document.forms[0].ordre" + i
            prx = "document.forms[0].prix" + i
            alert(a.value);            if (a.value "montant" && a.checked true && prx.value != "") {
                alert("oui")   
            } else {
                alert("non")   
            }
        }

le msg alert(a) me retourne "undefined"
Messages postés
38
Date d'inscription
lundi 15 septembre 2003
Statut
Membre
Dernière intervention
24 novembre 2008

Après pas mal d'énervement, j'y suis presque Il me manque encore le contrôle pour voir si c'est un numérique, ça ne fonctionne pas dans mon exemple ...

Si quelqu'un a une idée

function validerForm(tot)
{
    var error=0
    if (document.forms[0].accepte1.checked == false && document.forms[0].accepte2.checked == false) {
        alert("Vous devez accepter les conditions générales");
        error++
    } else {
        for (var i=0;i<tot;i++) {
            mon = "document.forms[0].ordre" + i + "[1]"
            prx = "document.forms[0].prix" + i             if (eval(prx).value "" && eval(mon).checked true) {
                if (isNaN(eval(prx).value) == true) {
                    alert("Veuillez indiquer un nombre !")
                } else {
                    alert("Veuillez compléter le prix !")
                }
                error++
            }
        }
    }
    if (error==0) {
        return true;
    } else {
        return false   
    }
}