Vérification de groupe de radio buttons

Résolu
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008 - 19 nov. 2008 à 06:31
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 22 nov. 2008 à 01:06
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

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
22 nov. 2008 à 01:06
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)
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
19 nov. 2008 à 07:08
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)
0
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
19 nov. 2008 à 07:34
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
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
19 nov. 2008 à 17:51
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
21 nov. 2008 à 05:48
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")   
            }
        }
}
0
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
21 nov. 2008 à 05:56
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"
0
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
21 nov. 2008 à 16:53
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   
    }
}
0