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 :

Barre de progression pour le chargement d'un formulaire


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 46
    Points : 32
    Points
    32
    Par défaut Barre de progression pour le chargement d'un formulaire
    Bonjour.

    Je dispose d'un formulaire HTML, donc le code très simplifié est le suivant:

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form action="action.php" method="post">
    <input id="Text1" type="text" />
    <input id="Submit1" type="submit" value="submit" />
    </form>
    Quand on clique sur le bouton "submit", il y a un long chargement avant de voir apparaitre le résultat sur la page.
    Malheureusement, pendant ce long chargement, on peut cliquer à nouveau plusieurs sur le bouton "submit"...

    Je souhaiterais donc afficher une barre de progression pendant ce long chargement et faire en sorte que le clic sur le bouton "submit" ne fonctionne plus.
    Par exemple :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <progress id="barre-progression" max="100" value="0" onload="Progress();"></progress> 
    <span id="lbl-avancement">0 %</span>
    Et un code JavaScript pour animer cette barre de progression qui pourrait par exemple ressembler à ceci :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function Progress(){
    var valeurAvancement = 0;
    var barreProgression = document.getElementById('barre-progression');
    var avancement = document.getElementById('lbl-avancement');
    valeurAvancement +=5;
    if(valeurAvancement <= barreProgression.max){
    barreProgression.value = valeurAvancement;
    avancement.innerHTML = valeurAvancement.toString() + ' %';
    setTimeout('Progress()', 500);}
    else{
    clearTimeout();
    }
    }
    Pourriez-vous, s'il vous plait, m'aider à résoudre les problématiques suivantes:
    Quel code JavaScript, à mettre dans la fonction Progress(), permet de détecter l'état d'avancement du chargement du résultat du formulaire?
    Quel événement faut-il utiliser, dans la balise HTML <progress>, pour lancer la barre de progression? (Est-ce onload?)

    Merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2006
    Messages : 226
    Points : 532
    Points
    532
    Par défaut
    Salut,

    le problème d'une barre de progression c'est qu'il faut un référentiel... est-ce que le traitement prend TOUJOURS le même temps ? parce que sinon, une fois lancer le traitement, comment tu vas savoir que tu as fait x% ?
    mieux vaut mettre le bouton en "disabled" un fois que tu as cliqué dessus et afficher un truc du genre : spin.js


    dans tous les cas, le lancement de la fonction progress() se fera sur le onsubmit du form.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="action.php" method="post" onsubmit="progress()">

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Quand tu soumets un formulaire, le navigateur va
    • fermer le document en cours ;
    • appeler la page indiquée dans l'attribut action du formulaire ;
    • attendre une réponse du serveur ;
    • une fois la réponse reçue du serveur, ouvrir un nouveau document ;
    • afficher la réponse reçue.

    Bref, lorsque tu attends la nouvelle page, il n'y a aucun document actif et donc nulle part où afficher une barre de progression.
    Donc ce que tu souhaites est impossible à faire lors d'une transaction "classique".
    Ce serait à la rigueur possible si la soumission se faisait par une requête AJAX, mais dans ce cas se poserait le problème soulevé par kakashi99 :
    comment tu vas savoir que tu as fait x% ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

Discussions similaires

  1. [AJAX] Barre de progression pour un upload ftp
    Par hicham285 dans le forum AJAX
    Réponses: 3
    Dernier message: 15/06/2011, 09h25
  2. Réponses: 1
    Dernier message: 30/07/2008, 12h07
  3. [Upload] Barre de progression pour upload volumineux
    Par cortex024 dans le forum Langage
    Réponses: 2
    Dernier message: 05/09/2007, 21h05
  4. [FLASH MX2004] Barre de progression pour ma vidéo.
    Par Justin_C dans le forum Flash
    Réponses: 7
    Dernier message: 28/11/2006, 17h31
  5. barre de progression pour fichier en telechargement
    Par Tierisa dans le forum Access
    Réponses: 6
    Dernier message: 07/04/2006, 14h49

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