IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

if dans une boucle (ou l'inverse)


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut if dans une boucle (ou l'inverse)
    Bonjour les gens

    Voilà j'ai voulu réaliser un script qui examine ligne par ligne le contenu des champs d'un formulaire en forme de tableau.
    En gros:
    - avoir au moins tous les champs de la première ligne remplis (ça ça fonctionne )
    - si, pour n'importe quelle autre ligne, un champ est rempli, les autres de cette même ligne doivent l'être aussi (ça ça fonctionne pas )

    Voici ce qui m'empêche de dormir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function verifForm(formulaire)
    {
    	if ((formulaire.p1.value == "")||(formulaire.m1.value == "")||(formulaire.c1.value == "")||(formulaire.d1.value == "")||(formulaire.t1.value == ""))
    	{
    		alert("Vous devez au moins remplir la première ligne!")
    	}
    	else
    	{
    		i=1;
    		while (i<10)
    			{
    				if (formulaire.p[i].value == "")
    					{
    						if ((formulaire.m[i].value != "")||(formulaire.c[i].value != "")||(formulaire.d[i].value != "")||(formulaire.t[i].value != ""))
    						{
    							alert("Veuillez remplir tous les champs d'une même ligne!");
    							break;
    						}
    						else
    						{
    							i++;
    							continue;
    						}
    					}
    				else if ((formulaire.m[i].value == "")||(formulaire.c[i].value == "")||(formulaire.d[i].value == "")||(formulaire.t[i].value == ""))
    					{
    						alert("Veuillez remplir tous les champs d'une même ligne!");
    						break;
    					}
    					else
    					{
    						i++;
    						continue;
    					}
    			}	
    		formulaire.submit()
    	}
    }
    Une partie du formulaire html:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <table width="800" border="0" bgcolor="black">
    <caption><h1>Formulaire</h1></caption>
    <tr align="center" BGCOLOR="yellow">
    <th width="20%">Colonne1</th>
    <th width="20%">Colonne2</th>
    <th width="20%">Colonne3</th>
    <th width="20%">Colonne4</th>
    <th width="20%">Colonne5</th>
    </tr>
    <tr align="center" BGCOLOR="#EEEE00"> /*Cette ligne DU TABLEAU apparait
    encore 8 fois, où on incrément
    chaque numéro des noms
    des champs à chaque fois*/
    <td><input type="text" name="p1"></td>
    <td><input type="text" name="m1"></td>
    <td><input type="text" name="c1"></td>
    <td><input type="text" name="d1"></td>
    <td><input type="text" name="t1"></td>
    </tr>
     
    ...
     
    <tr align="center" BGCOLOR="#CDCD00">
    <td colspan="5">
    <input type="button" value="Retour à l'accueil" OnClick="redirecAcceuil()">&nbsp; &nbsp;
    <input type="button" value="Valider" onClick="verifForm(this.form)">
    </td></tr></table>
    Alors, z'en pensez quoi?

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    EDIT : Oups ... sensible le bouton "enregistrer"

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par TokeinatorWrecK
    Alors, z'en pensez quoi?
    d'abord que les balises [CODE ][/CODE ] rendrait ton post + lisible.
    Ensuite que ta syntaxe pour accéder aux objets n'est pas bonne non plus (en restant poli )
    Enfin, que sans le html associé, ça serait aléatoire de tenter une correction.

    A+

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je les trouvées pas ces balises ^^

    C'est quoi de mauvais dans ma syntaxe d'accés aux objets?

  5. #5
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    Parce qu'on utilise pas le name pour accèder à des éléments

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Shinuza
    Parce qu'on utilise pas le name pour accèder à des éléments
    Et que même, en admettant, la syntaxe correct serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['formulaire'].elements['p1'].value
    Mais l'utilisation des ID est effectivement largement préférable

    Au fait, pour les balises [code ], le bouton est le "#" (à droite de tous les autres).

    A+

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon après les quelques réglages qui ont suivis suite à vos remarques, et ben ça change rien


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function verifForm(formulaire)
    {
    	if ((document.forms['formulaire'].elements['p1'].value == "")||(document.forms['formulaire'].elements['m1'].value == "")||(document.forms['formulaire'].elements['c1'].value == "")||(document.forms['formulaire'].elements['d1'].value == "")||(document.forms['formulaire'].elements['t1'].value == ""))
    	{
    		alert("Vous devez au moins remplir la première ligne!")
    	}
    	else
    	{
    		i=1;
    		while (i<10)
    			{
    				if (document.forms['formulaire'].elements['p[i]'].value == "")
    					{
    						if ((document.forms['formulaire'].elements['m[i]'].value != "")||(document.forms['formulaire'].elements['c[i]'].value != "")||(document.forms['formulaire'].elements['d[i]'].value != "")||(document.forms['formulaire'].elements['t[i]'].value != ""))
    						{
    							alert("Veuillez remplir tous les champs d'une même ligne!");
    							break;
    						}
    						else
    						{
    							i++;
    							continue;
    						}
    					}
    				else if ((document.forms['formulaire'].elements['m[i]'].value == "")||(document.forms['formulaire'].elements['c[i]'].value == "")||(document.forms['formulaire'].elements['d[i]'].value == "")||(document.forms['formulaire'].elements['t[i]'].value == ""))
    					{
    						alert("Veuillez remplir tous les champs d'une même ligne!");
    						break;
    					}
    					else
    					{
    						i++;
    						continue;
    					}
    			}	
    		formulaire.submit()
    	}
    }
    Je me demande si ça viendrais pas de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['formulaire'].elements['m[i]'].value
    le "i" (compteur) est surement pas interprété de la façon dont je voudrais

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par TokeinatorWrecK
    Je me demande si ça viendrais pas de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['formulaire'].elements['m[i]'].value
    le "i" (compteur) est surement pas interprété de la façon dont je voudrais
    Gââgné
    En fait il est pas interprété du tout, car "en dur" ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['formulaire'].elements['m['+i+']'].value
    devrait résoudre le pb

    A+

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon ça règle déjà un problème, mais au final ça n'arrange rien

    Je ne sais comment déboguer la chose, sur le plan logique ça me parait juste pourtant

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par TokeinatorWrecK
    Bon ça règle déjà un problème, mais au final ça n'arrange rien

    Je ne sais comment déboguer la chose, sur le plan logique ça me parait juste pourtant
    C'est à dire ?
    Tu en es où ?
    Fonctionnement ? Erreur ? Version actuelle de ton code ?

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon j'ai changer un peu le tout, ça marche toujours pas mais au moins j'aurais essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function verifForm(formulaire)
    {
     if ((document.getElementById('p1').value == "")||(document.getElementById('m1').value == "")||(document.getElementById('c1').value == "")||(document.getElementById('d1').value == "")||(document.getElementById('t1').value == "")) {
      alert("Vous devez au moins remplir la premi\350re ligne!");
     } else {
      var a="Veuillez remplir tous les champs d'une m\352me ligne!";
      var i=1;
      while (i<10) {
        if ((document.getElementById('p' + i + '').value == "")&&((document.getElementById('m' + i + '').value != "")||(document.getElementById('c' + i + '').value != "")||(document.getElementById('d' + i + '').value != "")||(document.getElementById('t' + i + '').value != ""))) {
          alert(a);
        } else if ((document.getElementById('p' + i + '').value != "")&&((document.getElementById('m' + i + '').value == "")||(document.getElementById('c' + i + '').value == "")||(document.getElementById('d' + i + '').value == "")||(document.getElementById('t' + i + '').value == ""))) {
           alert(a);
          } else if (i!=9) {
            i++;
            continue;
            } else {
            formulaire.submit()
            }
      }
     }
    }
    Bon la récupération des valeurs des champs est correct, mais là c'est la boucle qui pose problème, elle ne se termine pas (du moins pas comme je voudrais ) Je vais revoir un peu l'enchainement et les test conditionnels, parce que j'ai fait ça cette nuit, tard, très tard

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Ah ben enfaite c'est bon ça fonctionne, un petit rajout de break; ici ou là (d'ailleurs je ne sais même pas pourquoi je l'ai avait enlevé

    Merci pour votre aide, ça m'as permis de mon coucher moins c.. bête ces derniers jours Je reviendrais


    La fonction, qui fonctionne!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function verifForm(formulaire)
    {
    	if ((document.getElementById('p1').value == "")||(document.getElementById('m1').value == "")||(document.getElementById('c1').value == "")||(document.getElementById('d1').value == "")||(document.getElementById('t1').value == "")) {
    		alert("Vous devez au moins remplir la premi\350re ligne!");
    	} else {
    		var a="Veuillez remplir tous les champs d'une m\352me ligne!";
    		var i=1;
    		while (i<10) {
    				if ((document.getElementById('p' + i + '').value == "")&&((document.getElementById('m' + i + '').value != "")||(document.getElementById('c' + i + '').value != "")||(document.getElementById('d' + i + '').value != "")||(document.getElementById('t' + i + '').value != ""))) {
    						alert(a);
    						break;
    				} else if ((document.getElementById('p' + i + '').value != "")&&((document.getElementById('m' + i + '').value == "")||(document.getElementById('c' + i + '').value == "")||(document.getElementById('d' + i + '').value == "")||(document.getElementById('t' + i + '').value == ""))) {
    							alert(a);
    							break;
    						} else if (i!=9) {
    								i++;
    								continue;
    								} else {
    								formulaire.submit()
    								break;
    								}
    			}
    	}
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23
  2. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo