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 :

Associer history.back() avec une autre fonction ?


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 45
    Points
    45
    Par défaut Associer history.back() avec une autre fonction ?
    Bonjour à tous,

    Je pense que ce n'est pas possible, mais je pose la question quand même !

    Dans mon body onload, j'ai une fonction pret() qui met une div en display:none (v. ci-dessous ce que c'est que cette div).

    Puis, j'ai un form avec onsubmit="msg_attente();"
    Cette fonction est chargée d'afficher une div avec un message d'attente pendant le traitement du formulaire (upload et màj BDD), c'est une div à 100x100% et z-index 1000 afin que l'utilisateur ne puisse pas cliquer ailleurs dans la page pendant le traitement.

    Le pb, c'est que si l'utilisateur a fait une erreur de saisie dans le form, il reçoit un msg d'erreur. J'aimerais pouvoir lui offrir la possibilité de retourner en arrière avec un bouton retour et onclick=history.back(), afin qu'il puisse retrouver ce qu'il avait saisi dans les différents champs du form sans avoir le retaper.

    Or, avec history.back(), je reviens purement et simplement en arrière, sans rechargement de la page, et après l'exécution onsubmit de la fonction msg_attente() (qui donc avait produit son effet). Du coup, ce retour arrière m'affiche ma page avec ma div d'attente à 100% et z-index 1000, et pas moyen bien sûr d'accéder aux divers éléments de cette page !!!

    Alors je me demandais si en même temps qu'history.back, je pouvais interagir sur cette div d'attente ?

    J'ai essayé avec mon bouton retour de mettre onclick="history.back();prêt();" mais la fonction pret(), qui est censée mettre ma div en dispay:none, n'a ici aucun effet...

    Voilà...
    Merci d'avance pour votre aide ou vos suggestions !
    @+

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Je crois que c'est une très mauvaise idée que de procéder comme ça.

    La première raison est que le history.back() n'a pas le même effet sur tous les navigateurs (et qu'il peut même être configurable sur le navigateur) : certains navigateurs rechargent la page lors du "back()", d'autres non.

    La seconde raison c'est que javascript peut être désactivé.

    Le plus propre c'est que, si le formulaire a une erreur, tu réaffiches le formulaire (et non pas une page d'erreur) avec les erreurs trouvées au dessus des champs en erreur. Tu auras au préalable pris soin de remplir les champs par la valeur rentrée par l'utilisateur.

    Une autre solution est de détecter les erreurs à la volée lorsque les champs sont remplis et de faire faire la validation serveur par de l'AJAX.

    Quoi qu'il en soit, utiliser le history.back() sur les formulaires c'est mal et dangereux.

Discussions similaires

  1. [AC-2010] Associer liste de choix avec une autre donnée
    Par theolivier dans le forum IHM
    Réponses: 3
    Dernier message: 10/10/2012, 13h38
  2. Réponses: 3
    Dernier message: 21/10/2008, 21h52
  3. Réponses: 2
    Dernier message: 31/12/2007, 13h50
  4. Afficher une fonction avec une autre
    Par renaud26 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/08/2006, 14h29
  5. Réponses: 3
    Dernier message: 16/06/2004, 11h26

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