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 :

Réinitialiser formulaire après retour page précédente


Sujet :

JavaScript

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Réinitialiser formulaire après retour page précédente
    Bonjour,

    J'ai un formulaire avec des cases à cocher qui envoient vers des pages différentes selon la case/langue choisie. Le script fonctionne très bien, lorsque l'internaure choisit la langue anglaise, il se retrouve sur la page en anglais, s'il choisit la langue française, il se retrouve sur la page en française, etc.

    Mais petit problème : si l'internaute a d'abord choisi le français, et qu'il revient sur la page initiale avec le bouton "page précédente" de son navigateur,
    1) le formulaire indique l'option choisie "français", au lieu du texte "Choisissez la langue". Il peut quand-même changer de langue.

    2) Mais il ne peut pas revenir sur la page "français" (s'il lui prend cette fantaisie) par le formulaire qui ne fonctionne que sur l'événement onchange.

    Je vous joins mon code au cas où vous pourriez me dire quoi ajouter pour pallier ce petit défaut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <form name="jump">
    <select name="menu" size="1" onchange="document.location.href=this.value;">
    <option selected value="#">Choisissez une langue...</option>
    <option value="msds/msds_fr.php">Fran&ccedil;ais</option>
    <option value="msds/msds_en.php">Anglais</option>
    <option value="msds/msds_es.php">Espagnol</option>
    <option value="msds/msds_fi.php">Finnois</option>
    <option value="msds/msds_pt.php">Portugais</option>
    <option value="msds/msds_sv.php">Su&eacute;dois</option>
    </select>
    </form>
    Autre question : quelle est l'intérêt de mettre ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select name="menu" size="1" onchange="location=document.jump.menu.options
    [document.jump.menu.selectedIndex].value;" value="GO">
    à la place de celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="menu" size="1" onchange="document.location.href=this.value;">
    (aucune différence par rapport à mon problème précédent d'ailleurs).

    Merci de vos réponses

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    J'ai fait ce code vite fait en espérant que ca t'aidera
    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
    <script type="text/javascript" language="javascript">
    function test()
    {
    document.jump.menu.options[0].selected = true;
    }
    </script>
    <body bgcolor="#000099" onfocus="test()">
            <form name="jump">
    <select name="menu" size="1" onchange="document.location.href=this.value;">
    <option selected value="#">Choisissez une langue...</option>
    <option value="http://www.google.fr">Fran&ccedil;ais</option>
    <option value="msds/msds_en.php">Anglais</option>
    <option value="msds/msds_es.php">Espagnol</option>
    <option value="msds/msds_fi.php">Finnois</option>
    <option value="msds/msds_pt.php">Portugais</option>
    <option value="msds/msds_sv.php">Su&eacute;dois</option>
    </select>
    </form>
    </body>
    il fonctionne lors de retour...Il fonctionne dès que la focalisation est donné.
    Comme tu as dit que c'est une page que l'on voit qu'une fois donc il devrait pas avoir de problème, non ???

    Pour ta deuxieme question, alors là aucune idée moi je trouve plus simple de mettre le this.value et c'est bon

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour Kerod,

    Merci pour cet essai de dépannage. Je n'ai pas vu de différence, malheureusement. Je choisis français, j'arrive à la page français. J'utilise la flèche "précédente" de IE pour retourner au formulaire, "français" est toujours sélectionné et invalide. C'est bien dans le head qu'il faut rajouter le script? (et modifier aussi la balise body).

    Le cas des gens qui reviennent en arrière pour ensuite redemander la même page est certes rare, donc ce n'est pas bien embêtant, sauf que c'est mon client qui m'a signalé ce petit bug, et son propre client qui l'avait découvert !

    Depuis le temps que les webmestres utilisent des listes déroulantes pour envoyer sur diverses pages, personne n'a vu/corrigé ce problème? Peut-être faudrait-il séparer la liste déroulante d'un bouton "GO" qui seul commanderait l'ouverture de la page sélectionnée. Et je transforme le code comment pour ce faire?

    Merci d'avance

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ben non j'ai testé chez moi et c'est bien dans le body sur l'évènement onfocus

  5. #5
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  6. #6
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    salut
    ya un évenement qui est pris en charge avant que la page ne soit afficher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <script type="text/javascript" language="javascript">
     
    //A noter que loadpage n'a pas de ()
    window.onload = loadpage;
     
    function loadpage(){
    //jai pas testé cette ligne de code par contre, mais bon prennant pour acquis que ca fonctionne
     
     document.jump.menu.options[0].selected = true;
    }
    </script>
    A ben merde, j'ai oublié que tes objet ne sont pas encore créer quand cette méthode de window est appelé... Dsl pour le post inutile mais j'y ai pensé seulement après....le con!!

    bonne journée quand meme
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bon, reprenons...

    Mon problème vient du fait que la page (et donc le formulaire) n'est pas rechargée quand l'internaute revient en arrière.

    Est-ce qu'on pourrait inclure une commande qui remet le formulaire à zéro quand on est dirigé vers la page de la langue choisie?

    Ou bien qui aurait le javascript + html complet pour avoir à la fois la liste déroulante et le bouton GO qui active le choix?

    Je ne comprends rien du tout au javascript donc non seulement il me faut le script mais aussi savoir où l'inclure ...

    Bon, je suis les progrès de la discussion et merci pour vos interventions.

  8. #8
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Salut
    bon ce que tu peux faire
    c'est simple c'est du php

    tu te garde un variable de session que tu nommes par exemple
    $_SESSION['pageProvenance'] = "taPage.php";

    Cette variable t'as juste a la valider au début de ton code et la changer lorsqu'elle est exacte
    Je m'explique...dison que ta premiere page s'appelle index.php...Si c'est la premiere page qu'on tombe dessus pas de pb, si ca vient d'une autre page qu'on va nommer autrePage.php alors voici:

    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
     
    //Dans index.php
    session_start();
     
    if(isset($_SESSION['pageProvenance']) && $_SESSION['pageProvenance'] == "autrePage.php"){
     
    //si ca entre ici alors tu modifie ta variable et lui donne le nom de ta page
    $_SESSION['pageProvenance'] = "index.php";
     
    ...
    }
    else if(!isset($_SESSION['pageProvenance']) || $_SESSION['pageProvenance'] != "autrePage.php"){
     //tu le redirige vers où tu veux ou encore
    // tu peux réinitialiser tes variable post...car en faisant un back, ca doit demander une confirmation du genre il y a certain élément envoyé, voulez vous recommencer...
    }
    Donc une fois que l'usager a choisi la langue et est rediriger sur cette page...dans cette page tu modifies la variable session...ainsi, quand l'usager va faire un back...il va tomber sur index.php qui va valider la variable de session et va le rediriger car elle s'attend a ce que la page de provenance soit autrePage.php

    C'est une petit astuce pour ne pas faire 2 ajout dans la bd en cas d'un rafraichissment avec f5 aussi

    J'espere t'avoir mis sur une piste
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour Ozzmaxx,

    Je n'ai pas tout compris, mais bon, je pense avoir le shéma. Si je viens sur la page index.php à partir de la page de la langue, et où j'aurai défini la variable session = autrePage, alors l'internaute est redirigé vers index2.php qui est une copie de index, mais pas encore chargée donc le formulaire sera OK, c'est ça?

    Pourquoi pas, mais c'est un peu compliqué. Et, question bête, la variable de session passe automatiquement d'une page à l'autre? Je sais, je débute...
    Et autre question : Il ne faut pas fermer la session quelque part?

    Je trouve que tout cela est bien compliqué. Il n'y aurait pas un script qui obligerait à recharger la page dès que l'on y accède par bouton retour depuis certains URL particuliers? Si par exemple je définis sur chaque page de langue la variable $recharger ="oui" est-ce que sur la page index.php je peux avoir un script qui dit if $recharger="oui" alors recharger la page ?? En mélangeant éventuellement du PHP et du javascript?

    ou alors en examinant l'URL de provenance par un $_GET ? Un peu sorcier pour moi déjà, ça... mais c'est en phpant qu'on devient phperon.

    Et où faudrait-il mettre ce script? Vu que ça ne concerne qu'une page, et que le head HTML vient d'un include commun à toutes les pages.

    Bon en tout cas moi je croyais que mon problème serait résolu en 1/2 ligne ! Le Form_Var.reset(); de FremyCompany m'aurait bien plu, mais ça ne me parle pas du tout. Je le mets où et comment??

    Bien merci à tous ceux qui daignent voler à mon secours. C'est vraiment stupide ce petit problème ! Et si je désactivais le bouton retour du navigateur !? C'est faisable, ça? Bon, je commence à fumer du cerveau, je vais dormir un peu, c'est plus sûr.

  10. #10
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Salut
    bon les variable de session sont des variable qui vont toujours etre accessible tant que ta session ne sera pas détruite...va te renseigner ladessus elles sont très utiles. En passant ta session est détruite quand tu ferme le navigateur ou que tu détruit ta session...

    donc dans ton cas je te rééexplique car ca peut etre utile...

    ta premiere page est celle des langues on va l'appeler langue.php
    dans cette PREMIERE page, tu va setter ta variable php si elle n'existe pas bien sur...et comme c'est ta premiere page, elle ne devrait pas exister

    donc:

    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
     
    //avec les sessions tu dois avoir ca en premier
    session_start();
     
    //tu vérifie si elle n'existepas
    if(isset($_session['page'])){
    //c'est la premiere fois qu'on arrive dans cette page de langue
    //excellent on attribut une valeur à la variable
     
    $_session['page'] = "pageLangue.php";
    //...il peut y avoir d'autre chose
    else{
    //donc si ca entre ici, ca veux donc dire que ta variable à déjà été enregistré
    //Ca veut dire que tu es déjà passer par cette page puisque c'est la premiere..donc..ca vient d'une autre page (avec un back)
     
    //tu peux donner des instructions ici
    }
    C'était pour la premiere page..celle de la langue
    bon tu disais que tu redirigais après avoir choisis
    je me posais la question...tu gardes comment en mémoire que l'utilisateur a choisi le francais comme langue...oki tu le redirige mais par la suite...tu restes toujours dans la meme page?
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Salut Ozzmax,

    Merci pour tes précisions sur les sessions, j'ai appris quelque chose.

    Bon, on va reprendre en nommant les pages comme elles s'appellent en réalité, ce sera plus clair finalement.

    1. le visiteur arrive sur une page nommée documentation.php
    2. Il y a sur cette page un formulaire à liste déroulante qui permet de choisir la langue.
    3. Quand il choisit la langue, mettons anglais, le javascript du formulaire le redirige automatiquement vers la page de la langue, c'est-à-dire, msds_en.php (dans le répertoire msds).
    4. Le visiteur ne trouve pas ce qu'il veut, il utilise la flèche "précédente" de son navigateur pour retourner sur la page documentation.php pour choisir une autre langue. (Il peut faire autrement, mais ce visiteur-là choisit de faire comme ça).
    5. Le formulaire ne s'est pas réinitialisé, il reste sélectionné sur "anglais". S'il veut aller sur une autre langue, il la choisit et ça redirige bien. Mais s'il veut retourner sur "anglais" parce qu'aucune autre langue ne lui convient (je sais c'est tordu, mais c'est arrivé au client du client, donc...), il ne peut pas via le formulaire, car la redirection se fait sur un "onchange" et il n'y a pas de changement puisqu'on est déjà sélectionné sur "anglais".
    Donc ce que je voulais faire, c'est obliger le formulaire à se réinitialiser lors de la redirection, ou bien ajouter un bouton "GO" associé à l'action de redirection plutôt que le onchange. Mais je ne sais faire ni l'un ni l'autre parce que je ne fais pas du tout de javascript.
    J'espère que c'est bien clair maintenant, mon histoire ?
    Et si je ne parviens pas à le faire, vu le petit nombre actuel de langues, je peux supprimer le formulaire et remplacer par des liens à cliquer ! Mais j'ai d'autres formulaires du même type sur d'autres sites, avec le même petit inconvénient. Donc une parade serait bienvenue.
    Re-merci !

  12. #12
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    salut
    bon oki alors ne nous compliquons pas la vie!
    t'as une liste déroulante avec un évenement onChange(); qui appel du javascript j'imagine... pour effectuer ton changement de page

    Et bien t'as qu'a rien faire dans le onChange() de la liste déroulante et mettre un bouton go comme tu dis et dans son évenement onclick tu valides la valeur de la liste déroulante des langues
    Ce que tu as a faire:
    1- mettre un id à ta liste déroulante..appelons le "_lstLangue"
    1.1- des values (tu dois l'avoir fait) pour les options de langue
    2- un bouton go de type button
    3- un fonction javascript qui va valider la langue choisie
    4- un nom a ton formulaire pour qu'on puisse changer son action (frmDocumentation)

    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
     
    <script type="text/javascript" language="javascript">
     function redirigeLangue(){
      var langue = document.getElementById("_lstLangue").value;
     
      //la t'a différentes options avec des if ou un switch
      if(langue == '1'){ //francais
       document.frmDocumentation.action = "msds_fr.php";
       document.frmDocumentation.submit(); 
      }
      else if(langue == '2'){ //Anglais
       document.frmDocumentation.action = "msds_en.php";
       document.frmDocumentation.submit();
      }
      else if(//si t'as d'autre langue){
        ...
      }
      else{
       //Ca va rentrer ici s'il n'y a pas de langue choisi donc value = 0
       alert("Vous devez choisir une langue");
      }
     }
    Pour la liste déroulante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <form name="frmDocumentation" action="" method="post">
     <select name="lstLangue"  id="_lstLangue">
      <option value="0">Choisir une langue</option>
      <option value="1">Francais</option>
      <option value="2">English</option>
     </select>
     
     <input type="button" name="btnOk" value="Go" onClick="javascript:redirigeLangue();">
    </form>
    Et voilà!
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci Ozzmax, dès que j'ai un peu de temps je m'y replonge et je vous tiens tous au courant.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/08/2008, 08h08
  2. [Cookies] Retour pages précédentes par navigateur
    Par pat06 dans le forum Langage
    Réponses: 9
    Dernier message: 17/01/2008, 15h33
  3. Formulaire et retour page précédente
    Par namstou3 dans le forum Langage
    Réponses: 1
    Dernier message: 14/09/2007, 14h14
  4. Retour page précédente
    Par Mister Nono dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 11/07/2006, 22h14
  5. [2.0] Retour page précédente
    Par davasm dans le forum ASP.NET
    Réponses: 6
    Dernier message: 20/06/2006, 16h25

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