Problème entre les if et les else...

Voir le sujet précédent Voir le sujet suivant Aller en bas

Résolu Problème entre les if et les else...

Message par Evaliah le Mar 14 Jan 2014 - 14:24

Bonjour !


Je viens vous voir pour un problème de javascript qui ne marche pas comme je veux.

Voici le code en question :
Code:
 // RADIO        
        for(var i = 0; i < form.demande_type.length; i++)
{
        if(form.demande_type[i].checked == true) {
        
        if(form.demande_type[1].checked == true) {
        if(form.pa_qeel[0].checked == true && form.pa_qeel[1].checked == true) {txt_message +=  '<b>une PA et un Qeel</b>\n\n';}
        else if (form.pa_qeel[0].checked == true) {txt_message +=  'une <b>PA</b>';}
        else if (form.pa_qeel[1].checked == true) {txt_message +=  'un <b>Qeel</b>';}
        }
        
        if(form.demande_type[7].checked == true) {txt_message +=  '<b>' + form.divers_type.value + '</b>\n\n';}
        
        if(form.demande_type[0].checked == true || form.demande_type[4].checked == true) {txt_message +=  'un <b>' + form.demande_type[i].value + '</b>\n\n';}

        else {txt_message +=  'une <b>' + form.demande_type[i].value + '</b>\n\n';}
        
        }

   else {alert("Vous n'avez pas choisi votre type de demande !");
      return false;}
}

Il s'agit d'un code pour un formulaire, qui va écrire dans le message ce qui correspond au choix fait par l'utilisateur. Il s'agit de différents boutons radio, dont deux choix on des spécificités particulières : Le choix [1] affiche deux checkbox si on le coche, et donc je veux afficher un résultat en fonction de celle(s) qui seront cochées. Le choix [7] affiche un champ texte si on le coche et je veux afficher ce qu'aura écrit l'utilisateur.
En dehors de ça si un des autres choix (donc les choix 0,2,3,4,5 et 6) est coché j'ai besoin qu'il affiche un déterminant (un ou une) en fonction de si c'est un choix de genre masculin ou féminin.
Mais il doit y avoir quelque chose que je ne fais pas bien parce-que là avec le code que je vous ai mis quand je clique sur le bouton d'envoi du formulaire il m'affiche systématiquement l'alerte, même si j'ai coché un des choix.
Autre problème, le
Code:
else {txt_message +=  'une <b>' + form.demande_type[i].value + '</b>\n\n';}
s'exécute presque systématiquement (quand j'enlève l'alerte qui fait rater l'envoi).

Il doit y avoir quelque chose que je n'ai pas compris dans les if et les else mais j'ai beau avoir lu et relu plusieurs explications à ce sujet sur différents sites je ne comprends pas quoi :s

Merci pour votre aide !


Dernière édition par Evaliah le Jeu 16 Jan 2014 - 22:56, édité 2 fois

Evaliah
****

Féminin
Messages : 317
Inscrit(e) le : 14/01/2013

http://lestroisiles.forumactif.org/
Evaliah a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Problème entre les if et les else...

Message par Scoubifitz le Mar 14 Jan 2014 - 20:51

bonsoir,

Peut-on voir le code complet , ou du moins , la partie html du formulaire concernant ce script ?

Le choix [1] affiche deux checkbox si on le coche

il y a une fonction supplémentaire pour faire apparaitre les deux cases à cocher ?

Le choix [7] affiche un champ texte si on le coche et je veux afficher ce qu'aura écrit l'utilisateur.

Une autre fonction ?

Comme il n'y a pas assez d'éléments pour traiter le problème , il faudrait plus d'infos , merci .

Scoubifitz
+ Hyperactif +

Masculin
Messages : 3539
Inscrit(e) le : 18/03/2008

http://scoubidous.superforum.fr/
Scoubifitz a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Problème entre les if et les else...

Message par Evaliah le Mar 14 Jan 2014 - 21:16

Merci pour ta réponse Smile

Je joins une plus grande partie du formulaire alors, j'espère que ça pourra aider Smile


Code:
     code retiré car il n'est pas utile dans la résolution du problème :)


Dernière édition par Evaliah le Jeu 16 Jan 2014 - 22:16, édité 1 fois

Evaliah
****

Féminin
Messages : 317
Inscrit(e) le : 14/01/2013

http://lestroisiles.forumactif.org/
Evaliah a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Problème entre les if et les else...

Message par Evaliah le Mer 15 Jan 2014 - 17:49

Un petit message pour dire que ma question est toujours d'actualité Smile

Evaliah
****

Féminin
Messages : 317
Inscrit(e) le : 14/01/2013

http://lestroisiles.forumactif.org/
Evaliah a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Problème entre les if et les else...

Message par Scoubifitz le Jeu 16 Jan 2014 - 12:37

Bonjour,

Vous n'êtes pas oubliée ...
comme j'ai eu des petits soucis d'ordi , vous n'aurez la réponse que ce soir ...

Merci de votre patience .

Scoubifitz
+ Hyperactif +

Masculin
Messages : 3539
Inscrit(e) le : 18/03/2008

http://scoubidous.superforum.fr/
Scoubifitz a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Problème entre les if et les else...

Message par Evaliah le Jeu 16 Jan 2014 - 12:39

D'accord merci j'attends ce soir avec impatience alors Smile

Edit 18h56 : pour l'heure j'ai résolu mon problème de vérification de radio coché. J'ai mis ceci :
Code:
                // vérification type coché
for(i = 0; i < form.demande_type.length; i++){
   if(form.demande_type[i].checked) return true;
}
alert("Vous n'avez pas choisi votre type de demande !");
return false;
A la toute fin de mon js pour l'envoi du formulaire, comme ça il ne fait la vérification qu'à ce moment et ne génère pas de problème sur ce point-là.
J'en suis encore à essayer d'obtenir le résultat que je veux sur le détail selon le radio coché...


Edit 21h23 : Je progresse Smile
J'arrive maintenant à afficher le bon déterminant (un, une, des) sans aucun bug, mais pour l'instant sans tenir compte des cases à cocher ou du champ à remplir pour les choix [1] et [7] des boutons radio Smile
Voici le code à ce stade :
Code:
      // RADIO
for(var i = 0; i < form.demande_type.length; i++)
{
if(form.demande_type[i].checked == true) {
        if(form.demande_type[0].checked == true || form.demande_type[4].checked == true) {txt_message += "un " + form.demande_type[i].value; }
        else if(form.demande_type[2].checked == false) {txt_message += "une " + form.demande_type[i].value;}
        else if(form.demande_type[2].checked == true) {txt_message += "des " + form.demande_type[i].value;}
        }
}
Je l'ai refait entièrement en essayant de faire quelque chose de plus propre, c'est plus "joli" et ça marche donc c'est bien... Maintenant je vais m'attaquer à nouveau aux deux choix spéciaux ([1] et [7]), peut-être qu'avec ce code j'y arriverai mieux...

Evaliah
****

Féminin
Messages : 317
Inscrit(e) le : 14/01/2013

http://lestroisiles.forumactif.org/
Evaliah a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Problème entre les if et les else...

Message par Scoubifitz le Jeu 16 Jan 2014 - 21:33

re,

Remplacez le script que vous avez fourni au premier message par celui ci :

Code:
txt_message += '<div class="formulaire_r_descript_f" style="font-style:normal">J\'aimerais ';
// RADIO
var dem = form.demande_type;
if(!dem[0].checked && !dem[1].checked && !dem[2].checked && !dem[3].checked && !dem[4].checked && !dem[5].checked && !dem[6].checked && !dem[7].checked)
{alert("Vous n'avez pas choisi votre type de demande !");return false;}
 if(dem[0].checked) {txt_message +=  'un <b>' + form.demande_type[0].value + '</b>\n\n';}
else if(dem[1].checked && !form.pa_qeel[0].checked && !form.pa_qeel[1].checked)
{alert("Vous n'avez pas coché de case !");return false;}
else if(dem[1].checked && form.pa_qeel[0].checked && form.pa_qeel[1].checked) {txt_message +=  '<b>une PA et un Qeel</b>\n\n';}
else if (dem[1].checked && form.pa_qeel[0].checked && !form.pa_qeel[1].checked) {txt_message +=  'une <b>PA</b>';}
else if (dem[1].checked && !form.pa_qeel[0].checked && form.pa_qeel[1].checked) {txt_message +=  'un <b>Qeel</b>';}
else if(dem[2].checked) {txt_message +=  'des <b>' + form.demande_type[2].value + '</b>\n\n';}
else if(dem[3].checked) {txt_message +=  'une <b>' + form.demande_type[3].value + '</b>\n\n';}
else if(dem[4].checked) {txt_message +=  'un <b>' + form.demande_type[4].value + '</b>\n\n';}
else if(dem[5].checked) {txt_message +=  'une <b>' + form.demande_type[5].value + '</b>\n\n';}
else if(dem[6].checked) {txt_message +=  'une <b>' + form.demande_type[6].value + '</b>\n\n';}
else if(dem[7].checked) {txt_message +=  '<b>' + form.divers_type.value + '</b>\n\n';}
txt_message +=  'la suite blabla ...';

Scoubifitz
+ Hyperactif +

Masculin
Messages : 3539
Inscrit(e) le : 18/03/2008

http://scoubidous.superforum.fr/
Scoubifitz a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Problème entre les if et les else...

Message par Evaliah le Jeu 16 Jan 2014 - 22:13

Merci pour votre réponse Smile
J'ai bien lu le contenu de votre code et je vois que vous choisissez de détailler chaque résultat selon le bouton radio coché, le tout avec des else if.
De mon côté après avoir réussi à me débloquer comme je l'ai expliqué dans mes édits dans le message précédent je suis arrivé à ce code :
Code:
      // RADIO
for(var i = 0; i < form.demande_type.length; i++)
{
if(form.demande_type[i].checked == true) {
        if(form.demande_type[0].checked == true || form.demande_type[4].checked == true) {txt_message += "un " + form.demande_type[i].value; }
        else if(form.demande_type[2].checked == false) {
        if(form.demande_type[7].checked == true) {txt_message += form.divers_type.value;}
        else if(form.demande_type[1].checked == true) {
        if(form.pa_qeel[0].checked == true && form.pa_qeel[1].checked == true){txt_message += "une PA et un Qeel";}
        else if(form.pa_qeel[0].checked == true){txt_message += "une PA";}
        else {txt_message += "un Qeel";}
        }
        else {txt_message += "une " + form.demande_type[i].value;}
        }
        else if(form.demande_type[2].checked == true) {txt_message += "des " + form.demande_type[i].value;}
        }
}
Il a l'avantage de ne pas détailler chaque option, mais finalement le résultat est le même Smile
Par contre ce que j'aimerais vraiment savoir avant de mettre ce sujet comme résolu c'est pourquoi mon premier essai n'a pas marché. Est-ce parce-que j'avais mis des if au lieu d'else if ? Autre chose ? Je sais que mon code final est plus propre que celui que j'avais présenté mais en dehors de ça je ne suis pas certaine de comprendre pourquoi le premier ne marchait pas, et le savoir m'aiderait à ne pas refaire l'erreur Smile
Merci en tout cas pour le temps que vous avez passé pour faire le code que vous proposez  cheers 

Evaliah
****

Féminin
Messages : 317
Inscrit(e) le : 14/01/2013

http://lestroisiles.forumactif.org/
Evaliah a été remercié(e) par l'auteur de ce sujet.
  • 0

Résolu Re: Problème entre les if et les else...

Message par Scoubifitz le Jeu 16 Jan 2014 - 22:25

pour faire plus simple , il aurait fallu mettre les articles "un , une , des" dans les "values" des cases radios ...

sinon , un peu plus simple , avec l'alerte à la fin du bout de code :

Code:
txt_message += '<div class="formulaire_r_descript_f" style="font-style:normal">J\'aimerais ';
// RADIO
var dem = form.demande_type;
 if(dem[0].checked) {txt_message +=  'un <b>' + form.demande_type[0].value + '</b>\n\n';}
else if(dem[1].checked && !form.pa_qeel[0].checked && !form.pa_qeel[1].checked)
{alert("Vous n'avez pas coché de case !");return false;}
else if(dem[1].checked && form.pa_qeel[0].checked && form.pa_qeel[1].checked) {txt_message +=  '<b>une PA et un Qeel</b>\n\n';}
else if (dem[1].checked && form.pa_qeel[0].checked && !form.pa_qeel[1].checked) {txt_message +=  'une <b>PA</b>\n\n';}
else if (dem[1].checked && !form.pa_qeel[0].checked && form.pa_qeel[1].checked) {txt_message +=  'un <b>Qeel</b>\n\n';}
else if(dem[2].checked) {txt_message +=  'des <b>' + form.demande_type[2].value + '</b>\n\n';}
else if(dem[3].checked) {txt_message +=  'une <b>' + form.demande_type[3].value + '</b>\n\n';}
else if(dem[4].checked) {txt_message +=  'un <b>' + form.demande_type[4].value + '</b>\n\n';}
else if(dem[5].checked) {txt_message +=  'une <b>' + form.demande_type[5].value + '</b>\n\n';}
else if(dem[6].checked) {txt_message +=  'une <b>' + form.demande_type[6].value + '</b>\n\n';}
else if(dem[7].checked) {txt_message +=  '<b>' + form.divers_type.value + '</b>\n\n';}
else
{alert("Vous n'avez pas choisi votre type de demande !");return false;}
  txt_message +=  'la suite blabla ...';

pour le souci du début , je pense que c'est une imbrication des if qui pose problème ...

pour votre dernier code , les cases à cochées peuvent rester vides et il y aura quand même un envoi ?

Scoubifitz
+ Hyperactif +

Masculin
Messages : 3539
Inscrit(e) le : 18/03/2008

http://scoubidous.superforum.fr/
Scoubifitz a été remercié(e) par l'auteur de ce sujet.
  • 0

Résolu Re: Problème entre les if et les else...

Message par Evaliah le Jeu 16 Jan 2014 - 22:51

@Scoubifitz a écrit:pour faire plus simple , il aurait fallu mettre les articles "un , une , des" dans les "values" des cases radios ...

Oui je sais, ça aurait été plus simple, mais en fait ces values servent également pour le titre du message qui sera posté, qui est au final de la forme : " ?. Codage de Formulaire pour [nom_forum] " (en prenant par exemple le codage d'un formulaire), donc j'ai fait en sorte que tous les values puissent être précédées de "de" pour standardiser le titre. Et puis ça m'a permis de progresser et ça ça n'a pas de prix ! Smile
D'accord pour l'imbrication des "if", je m'en doutais un peu d'où le titre de mon message, je pense que c'est à force de pratique que j'arriverai à éviter ce genre d'erreur =)

Et concernant mon dernier code si aucun bouton radio n'est coché ou si aucune des deux cases du bouton radio [1] n'est cochée j'ai mis ceci tout à la fin de ma partie js :
Code:
                // vérification type coché
for(i = 0; i < form.demande_type.length; i++){
   if(form.demande_type[i].checked && form.demande_type[1].checked == false) return true;
else if(form.demande_type[1].checked == true){
if(form.pa_qeel[0].checked == true || form.pa_qeel[1].checked == true){return true;}
}
}
alert("Vous n'avez pas choisi votre type de demande !");
return false;

}
Du coup on a le même message si on n'a coché aucun bouton radio ou si on n'a coché aucun checkbox du bouton radio [1] mais bon je ne pense pas qu'il soit nécessaire d'aller jusqu'à compliquer le code en mettant deux messages d'erreur, un seul un peu global suffira  pirat 

Merci encore pour le temps que vous avez pris pour m'aider à résoudre ce problème Smile

=> Résolu  cheers 

Evaliah
****

Féminin
Messages : 317
Inscrit(e) le : 14/01/2013

http://lestroisiles.forumactif.org/
Evaliah a été remercié(e) par l'auteur de ce sujet.

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum