Partage
  • Partager sur Facebook
  • Partager sur Twitter

Redirection de page

    14 février 2019 à 10:06:24

    Bonjour,

    Je tiens d'abord à vous remercier d'avoir cliqué sur ce topic afin de m'apporter votre aide.

    J'explique mon cas !

    Je suis actuellement en projet et j'ai besoin d'une interface WEB.

    Pour l'interface en elle même, je ne rencontre pas de problème. Cependant, je voudrais pouvoir rediriger vers une autre page via un bouton submit en fonction des choix sélectionnés dans un formulaire.

    Vous voyez directe ou je veux en venir ! Je tente des choses mais je n'arrive pas à poser les conditions de la redirection ^^.

    Je vous pose mon code en dessous de mon message.

    Je tiens à rappeler que je ne veux pas un code tout frais je veux que l'on m'explique ^^.

    Cordialement,

    <ul>

       <li><p>Type de Modem :</p></li>

       <form>

                    <select name="typeModem" size="1">

                    <option>ADSL</option>

                    <option>EFM</option>

                </select>

                <li><p>Type de Routage :</p></li>

                <select name="typeRoutage" size="1">

                    <option>Bridge</option>

                    <option>Routé</option>

                </select>

                </form>

    </ul>

            <br>

           <div style="text-align: center;"> 

            <form name="formulaire" method="POST">

                <input name="bouton" type="submit" value="Suivant">

            </form> 

           </div>

           <script type="text/javascript">

                pageADSLRoute function() {

                    window.location = "ADSLRoute.html";

                }

                if (typeModem == ADSL && typeRoutage == Routé) {

                    bouton=pageADSLRoute;

                };

           </script>

    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2019 à 10:17:39

      Bonjour,

      Plusieurs choses ne vont pas:

      1- Ton bouton submit est dans un deuxième formulaire or il devrait se retrouver dans le premier.

      2- Évite les <br />, favorise le css pour rajouter des espacements entre les blocs. Le <br /> sert à faire un saut à la ligne dans un paragraphe.

      3- La syntaxe de ta fonction est mauvaise.

      C'est:

       function pageADSLRoute ()

      et non:

      pageADSLRoute function()

      4- La redirection dans ta fonction ne sera jamais exécuté parce que tu ne fais à aucun moment appel à ta fonction dans ton code. Regarde du côté de l'attribut onclick en HTML ou de l'événement click en JavaScript.

      N'oublie pas de faire un event.preventDefault() pour stopper le comportement par défaut du formulaire.

      5- Ne met pas ton css directement dans les balises. Déplace le dans un fichier externe .css que tu appelleras dans ton <head> grâce à la balise <link>.

      6- Revois l'indentation de ton code parce qu'actuellement elle est plutôt aléatoire.

      Il vaut mieux faire une redirection du côté serveur mais tout dépend de ce que tu veux faire des données récupérées par le formulaire.

      • Partager sur Facebook
      • Partager sur Twitter
      "Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
        14 février 2019 à 10:29:39

        Merci pour ce retour ! 

        Je vais procéder à quelques modifications ^^.

        Peut tu approfondir sur fait que je ne fasse pas appel à ma fonction je n'ai pas compris; Je pensais qu'en language WEB :

        if (typeModem == ADSL && typeRoutage == Routé) {

                        bouton = pageADSLRoute

                    };

        suffirai à appeler ma fonction "pageADSLRoute".

        Par contre je tiens à préciser qu'il n'y a pas tout mon code et que mon css est bien dans un fichier externe ;).

        <link rel="stylesheet" type="text/css" href="InterfaceWEB.css">

        Je ne comprend pas le "event.preventDefault()"  ça sert à empêcher le formulaire de reprendre ça forme initiale quand j'appuie sur le bouton ?

        Pour ce formulaire je veux juste aller chercher une page html en fonction des choix émis.

        • Partager sur Facebook
        • Partager sur Twitter
          14 février 2019 à 10:53:43

          En faisant ce code:

          bouton = pageADSLRoute
          
          

          cela n'appelle pas ta fonction mais met la variable pageADSLRoute comme valeur dans ta variable bouton ce qui provoque une erreur dans ton cas.

          Pour appeler une fonction, tu dois faire:

          bouton = pageADSLRoute()

          Ensuite, ton code JavaScript est tout le temps exécuté or d'après ce que j'ai compris, tu veux qu'il soit exécuté que lorsque tu cliques sur le bouton submit de ton formulaire. C'est pour cela que je te propose d'appeler ta fonction à travers un événement click.

          Le event.preventDefault() va du coup (si tu passes par un événement click en JavaScript) couper le comportement par défaut de ton formulaire (qui est d'envoyer le contenu du formulaire en POST ou en GET) pour que le code dans ton événement click puisse s'exécuter (regarde sur Google pour plus de détails).

          Ensuite, ta récupération de valeurs est mauvaise dans ta fonction.

          En JavaScript, on préfère utiliser les id pour cibler un élément.

          Ainsi pour récupérer le name d'un de tes champs, tu pourras faire ceci:

          this.getElementById('ton_id_du_champs').attr('name') === 'ADSL'

          Tu fais énormément d'erreurs basiques. Je te conseille de suivre un cours sur JavaScript sur ce site ou un autre pour acquérir les bases.



          • Partager sur Facebook
          • Partager sur Twitter
          "Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
            14 février 2019 à 11:02:28

            Merci pour ton retour rapide ! 

            Pendant que tu écrivais mon cerveau c'est illuminé en repensant à ce que tu avait écrit et j'ai compris !

            Je suis en train de ré-écrire mon code ça devrais fonctionner je te redis-ça après. :D

            • Partager sur Facebook
            • Partager sur Twitter
              14 février 2019 à 11:10:26

              Bonjour,

              Côté Javascript, récupère ton formulaire et ajoute lui un listener pour déclencher ta fonction à chaque fois que l'évènement submit (soumission du formulaire) se produit.

              Utilise preventDefault() comme te la conseiller @eclairia, puis récupère la valeur de tes champs, vérifie leurs valeurs et effectue ta redirection.

              Mais avant d'attaquer ton script, je te partage quelques améliorations de ton HTML :

              <form>
                <div>
                  <label for="modem-type">Type de Modem :</label>
                  <select id="modem-type" name="modem-type">
                    <option value="ADSL">ADSL</option>
                    <option value="EFM">EFM</option>
                  </select>
                </div>
              
                <div>
                  <label for="routage-type">Type de Rououtage :</label>
                  <select id="routage-type" name="routage-type">
                    <option value="Bridge">Bridge</option>
                    <option value="Routé">Routé</option>
                  </select>
                </div>
              
                <input type="submit" value="Suivant" />
              </form>


              <ul> est utilisé pour lister des éléments. Si tu souhaites simplement faire de la mise en forme (tes champs les uns sous les autres), utilise du CSS. La règle est "si tu souhaites faire de la mise en forme, écris du CSS". En respectant cette règle, tu évites également les balises </br> pour espacer tes champs.

              Utilise la balise <label> pour donner une légende à tes champs plutôt que <p>. Et pense à donner une valeur aux options de ton select.



              -
              Edité par Thomas D 14 février 2019 à 11:10:59

              • Partager sur Facebook
              • Partager sur Twitter
                14 février 2019 à 11:43:44

                Merci pour ce retour ! 

                Je voulais savoir : Où place tu le listener ? Car j'ai vu comment le déclarer mais pas où je devais le mettre dans mon code :)

                • Partager sur Facebook
                • Partager sur Twitter
                  14 février 2019 à 11:52:38

                  Tu peux le placer dans ton script Javascript directement.

                  const form = document.querySelector('form');
                  
                  form.addEventListener('submit', (event) => {
                     event.preventDefault();
                     /**
                      * TODO1: recup les valeurs de tes champs 
                      * TODO2: faire ta redirection si les conditions sont bonnes
                      */
                  });



                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 février 2019 à 11:54:06

                    Du coups après je déclare mon fichier js au même endroit que le css ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 février 2019 à 11:58:05

                      IlanPELLOQUIN a écrit:

                      Du coups après je déclare mon fichier js au même endroit que le css ?

                      Comme je ne sais pas où tu déclares ton fichier CSS, je ne peux pas te répondre.

                      <html>
                        <head>
                          <!-- title meta css etc. -->
                        </head>
                        <body>
                          <!-- code HTML, la structure de ta page -->
                          <script src="tonscript.js"></script>
                        </body>
                      </html>



                      -
                      Edité par Thomas D 14 février 2019 à 11:58:14

                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 février 2019 à 11:59:23

                        Tu dois déclarer ton script js avant la fermeture du </body>.

                        Cela permet ainsi d'éviter que le chargement de la page (contenu, css) soit augmenté par le chargement de différents scripts.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        "Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
                          14 février 2019 à 13:55:39

                          Excusez moi pour l'attente je fais plusieurs choses à la fois :lol:.

                          Du coups du côté js ça donne ça :

                          <script type="text/javascript">
                          
                          
                          const form = document.querySelector('form');
                          
                          form.addEventListener('submit', (event) => {
                          	event.preventDefault();
                          });
                          
                          
                          function choixRedirectionPage () {
                          
                          	if (typeModem == ADSL && typeRoutage == Bridge) {
                          		bouton = window.location.replace("ADSLBridge");
                          	};
                          
                          	if (typeModem == ADSL && typeRoutage == Routé) {
                          		bouton = window.location.replace("ADSLRouté");
                          	};
                          
                          	if (typeModem == EFM && typeRoutage == Bridge) {
                          		bouton = window.location.replace("EFMBridge");
                          	};
                          
                          	if (typeModem == EFM && typeRoutage == Routé) {
                          		bouton = window.location.replace("EFMRouté");
                          	};
                          }

                          Je sais pas si il y a encore des erreurs pour cette partie ?

                          En espérant ne pas trop vous déranger ^^

                          P.S: Je m'aperçois en relisant que j'ai oublié les ".html" dans les noms des pages !

                          -
                          Edité par IlanPELLOQUIN 14 février 2019 à 13:57:44

                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 février 2019 à 14:17:04

                            As-tu testé ton code?

                            Je pense que non parce qu'en le testant tu aurais vu que ta fonction n'est jamais appelé.

                            Ensuite, le code dans ta fonction n'est pas bon. Ouvre la console dans le navigateur et regarde les erreurs que tu as...

                            • Partager sur Facebook
                            • Partager sur Twitter
                            "Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
                              14 février 2019 à 14:29:13

                              IlanPELLOQUIN a écrit:

                              bouton = window.location.replace("ADSLBridge");
                              window.location = '...'; 

                              C'est suffisant pour faire ta redirection.

                              Ensuite, comme te l'a indiqué @eclairia, tu implémentes une fonction choixRedirectionPage que tu n'appelles jamais.

                              form.addEventListener('submit', (event) => {
                                  event.preventDefault();
                              
                                  // appel de ta fonction choixRedirectionPage 
                              });

                              Et à ce niveau, tu devrais encore avoir des erreurs au niveau de tes variables typeModel et typeRoutage.

                              Utilise la console de ton navigateur pour voir tes erreurs.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                14 février 2019 à 14:32:09

                                Je vois que l'on peut faire ça :

                                document.getElementById("myBtn").addEventListener("click", function(){
                                  event.preventDefault();
                                });

                                Alors suis-je obliger de mettre ceci en plus :

                                const form = document.querySelector("#button");


                                Il ne faut pas prendre en compte les noms car se sont des exemples.

                                Je m'aperçois également de l'erreur : 

                                Uncaught SyntaxError: Unexpected token <

                                Qui si je ne me trompe pas arrive car j'essaye de lire mon js directement depuis l'explorateur et non depuis mon serveur ?

                                -
                                Edité par IlanPELLOQUIN 14 février 2019 à 16:50:23

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  15 février 2019 à 10:01:54

                                  IlanPELLOQUIN a écrit:

                                  Je vois que l'on peut faire ça :

                                  document.getElementById("myBtn").addEventListener("click", function(){
                                    event.preventDefault();
                                  });

                                  Oui, ça fonctionnera également à condition que ton bouton de soumission ait pour id "myBtn" et que tu ajoutes event en paramètre de ta fonction.

                                  Et effectivement, dans ce cas, tu n'as pas besoin de la variable form.

                                  Comprends-tu la différence entre ce que je te propose et le code que tu me proposes ? Je déclenche une fonction lorsqu'on soumet le formulaire. Et toi, tu déclenches une fonction lorsqu'on click sur le bouton d'ID myBtn.

                                  IlanPELLOQUIN a écrit:

                                  Je m'aperçois également de l'erreur : 

                                  Uncaught SyntaxError: Unexpected token <

                                  Par hasard, n'aurais-tu pas ajouté la balise <script> dans ton fichier .js ?



                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    15 février 2019 à 11:45:11

                                    Bonjour,

                                    Oui je comprend la différence du coups.

                                    Et oui dans mon fichier js j'ai mis la balise :D c'est donc ça l'erreur !

                                    <script type="text/javascript">
                                    
                                    
                                    //const form = document.querySelector("#button");
                                    
                                    document.getElementById("#button").addEventListener('click', choixRedirectionPage(event) => {
                                    	event.preventDefault();
                                    });
                                    
                                    
                                    function choixRedirectionPage(event) {
                                    
                                    	if (typeModem == ADSL && typeRoutage == Bridge) {
                                    		window.location("ADSLBridge.html");
                                    	};
                                    
                                    	if (typeModem == ADSL && typeRoutage == Routé) {
                                    		window.location("ADSLRouté.html");
                                    	};
                                    
                                    	if (typeModem == EFM && typeRoutage == Bridge) {
                                    		window.location("EFMBridge.html");
                                    	};
                                    
                                    	if (typeModem == EFM && typeRoutage == Routé) {
                                    		window.location("EFMRouté.html");
                                    	};
                                    }

                                    Cependant, lorsque j'enlève cette balise l'erreur se ré-affiche avec la parenthèse du Listener :euh:

                                    Je crois qu'il n'aime pas le "event".

                                    -
                                    Edité par IlanPELLOQUIN 15 février 2019 à 13:21:16

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      15 février 2019 à 13:52:25

                                      Je pense que tu as cette erreur parce qu'il n'arrive pas à exécuter le code de ta condition à la ligne d'en dessous.

                                      A quoi correspond typeModem ou ADSL dan ton code selon toi?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      "Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
                                        15 février 2019 à 14:05:56

                                        Tu voudrais dire qu'il ne reconnais pas directement les choix des options dans les "select" en les appelants par leur "value" ? :)

                                        HTML :

                                        <!DOCTYPE html>
                                        
                                        <html>	
                                        
                                        	<head> 
                                        		<meta charset="UTF-8">
                                        		<title>ConfigurationModem1</title>
                                        		<link rel="stylesheet" type="text/css" href="InterfaceWEB.css">
                                        	</head>
                                        
                                        	<body>
                                        
                                        		<h1>INTERFACE DE CONFIGURATION DE MODEMS TECHNICOLORS</h1>
                                            		
                                                    <form>
                                                        <div>
                                                            <label for="typeModem">Type de Modem :</label>
                                                            <select id="typeModem" name="typeModem">
                                                                <option value="ADSL">ADSL</option>
                                                                <option value="EFM">EFM</option>
                                                            </select>
                                                        </div>
                                        
                                                        <div>
                                                            <label for="typeRoutage">Type de Rououtage :</label>
                                                            <select id="typeRoutage" name="typeRoutage">
                                                                <option value="Bridge">Bridge</option>
                                                                <option value="Routé">Routé</option>
                                                            </select>
                                                        </div>
                                        
                                                        <input id="button" type="submit" value="Suivant" onclick="choixRedirectionPage()"/>
                                                    </form>
                                        
                                        <script src="submit.js"></script>
                                        
                                        	</body>
                                        </html>

                                        JS :

                                        document.getElementById("#button").addEventListener('click', choixRedirectionPage(event) => {
                                        	event.preventDefault();
                                        });
                                        
                                        
                                        function choixRedirectionPage(event) {
                                        
                                        	if (typeModem == ADSL && typeRoutage == Bridge) {
                                        		window.location("ADSLBridge.html");
                                        	};
                                        
                                        	if (typeModem == ADSL && typeRoutage == Routé) {
                                        		window.location("ADSLRouté.html");
                                        	};
                                        
                                        	if (typeModem == EFM && typeRoutage == Bridge) {
                                        		window.location("EFMBridge.html");
                                        	};
                                        
                                        	if (typeModem == EFM && typeRoutage == Routé) {
                                        		window.location("EFMRouté.html");
                                        	};
                                        }



                                        -
                                        Edité par IlanPELLOQUIN 15 février 2019 à 14:10:26

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          15 février 2019 à 14:17:52

                                          Pas besoin de # pour récupérer ton élément d'ID button. Je t'ai aussi corrigé la suite pour qu'on avance un peu sur ton réel problème : la récupération des valeurs de tes select.

                                          document.getElementById("button").addEventListener('click', choixRedirectionPage);
                                          
                                          function choixRedirectionPage(event) {
                                            event.preventDefault();
                                            // le reste de ta fonction
                                          }

                                          IlanPELLOQUIN a écrit:

                                          Tu voudrais dire qu'il ne reconnais pas directement les choix des options dans les "select" en les appelants par leur "value" ? :)

                                          Non, ce n'est pas magique. Tu dois les récupérer.

                                           EDIT: retire le onclick="choixRedirectionPage()" dans ton code HTML.



                                          -
                                          Edité par Thomas D 15 février 2019 à 14:24:05

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            15 février 2019 à 14:24:01

                                            Merci :)

                                            Donc maintenant le défaut viens de mes conditions avec les id.

                                            J'ai aussi un défaut sur le preventDefault qui me dit :

                                            "Uncaught TypeError: Cannot read property 'preventDefault' of undefined

                                                at choixRedirectionPage"

                                            -
                                            Edité par IlanPELLOQUIN 15 février 2019 à 14:24:18

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              15 février 2019 à 14:25:22

                                              Retire le onclick="choixRedirectionPage()" dans ton code HTML.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                15 février 2019 à 14:27:00

                                                Je l'ai fait :)

                                                Ah oui du coups j'ai plus que le défaut pour récupérer mes infos !

                                                J'ai ajouté des "id" :

                                                            <form>
                                                                <div>
                                                                    <label for="typeModem">Type de Modem :</label>
                                                                    <select id="typeModem" name="typeModem">
                                                                        <option id="ADSL" value="ADSL">ADSL</option>
                                                                        <option id="EFM" value="EFM">EFM</option>
                                                                    </select>
                                                                </div>
                                                
                                                                <div>
                                                                    <label for="typeRoutage">Type de Rououtage :</label>
                                                                    <select id="typeRoutage" name="typeRoutage">
                                                                        <option id="Bridge" value="Bridge">Bridge</option>
                                                                        <option id="Routé" value="Routé">Routé</option>
                                                                    </select>
                                                                </div>
                                                
                                                                <input id="button" type="submit" value="Suivant" click="submit.js"/>
                                                            </form>

                                                J'ai plus d'erreurs mais mes pages ne chargent pas :lol:.

                                                Je pense que c'est du côté serveur maintenant.

                                                -------------------------------------------------------------

                                                En faite quand je regarde dans la console j'ai l'impression que l'erreur viens de mon fichier js car il n'a pas l'air d'appeler les autres fichiers ! :euh:

                                                -
                                                Edité par IlanPELLOQUIN 15 février 2019 à 14:50:35

                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Redirection de page

                                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                • Editeur
                                                • Markdown