Partage
  • Partager sur Facebook
  • Partager sur Twitter

Désactiver le bouton submit après envoie

Ca refresh la page ...

Sujet résolu
Anonyme
    31 juillet 2011 à 13:23:26

    Bonjour,

    Après 2 heures de recherches intensives, impossible de trouver ce que je recherche.
    En effet, dans mon formulaire d'upload de pièce jointe, cela peut prendre un certain temps, suivant la taille de celle-ci. Donc je veux désactiver le <button> submit, afin d'empêcher l'utilisateur de réenvoyer.

    J'ai trouvé une multitude de script permettant de faire cela, à chaque fois mon bouton se vérouille bien, mais ça refresh la page. Aucune donnée n'est traitée, aucune erreur affichée, ça refresh juste la page...

    Donc je désespère un petit peu, avez-vous une idée de pourquoi cela fait ça ?

    Merci d'avance, :)
    • Partager sur Facebook
    • Partager sur Twitter
      31 juillet 2011 à 13:35:06

      Montre ton code s'il te plait. Sur le coup, j'ai pas trop compris si tu utilise un input 'button' ou 'submit'.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        31 juillet 2011 à 13:50:31

        Salut,
        tu peux utiliser on submit:
        <form id="form1" name="form1" method="post" action="" onsubmit="document.getElementById('button').disabled='diabled'">
          <label for="salut">Salut</label>
          <input type="text" name="salut" id="salut" />
          <br />
          <input type="submit" name="button" id="button" value="Envoyer" />
        </form>
        
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          31 juillet 2011 à 13:52:11

          Par contre si tu désactive seulement le bouton, ca n'empêchera pas l'utilisateur d'appuyer sur la touche entrée.

          Il vaut mieux, lors du clic sur le bouton, mettre une fonction retournant faux sur l'événement onsubmit du formulaire.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            31 juillet 2011 à 13:53:59

            +1, mais à mon avis les utilisateurs qui ne savent pas qui savent qu'ils peuvent appuyer savent qu'il faur parfois attendre pour charger une page ( c'est mon avis, après vous en faites ce que vous voulez :D )
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              31 juillet 2011 à 13:57:25

              Ma remarque peut être valable dans d'autre cas, y compris pour des questions d'accessibilité ...
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                31 juillet 2011 à 14:10:01

                sebcap, tu pense à quelque chose comme sa ?
                <form id="form1" name="form1" method="post" action="" onsubmit="document.getElementById('button').disabled='diabled'; document.getElementById('button').addEventListener('click',function (){return false;},true)">
                  <label for="salut">Salut</label>
                  <input type="file" name="salut" id="salut" />
                  <br />
                  <input type="submit" name="button" id="button" value="Envoyer" />
                </form>
                
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  31 juillet 2011 à 14:24:57

                  Non :

                  <form method="post" action="" onsubmit="this.onsubmit=function(){return false;}">
                  


                  Sauf que du coup c'est pas forcément clair pour l'utilisateur. Le mieux (mais plus long) c'est un truc comme ca :

                  function bloquerFormulaire(form) {
                      // On verrouille les éléments
                      var els = form.getElementsByTagName('*');
                      for(i = 0 ; i < els.length ; i++) {
                          els[i].disabled = 'disabled';
                      }
                      
                      // On ajoute un message
                      var msg = document.createElement('span');
                      msg.innerText = 'Envoi en cours, veuillez patienter ...';
                      form.appendChild(msg);
                  
                      // On verrouille le formulaire lui même
                      form.onsubmit = function() {
                          return false;
                      }
                  
                      // On envoie le formulaire
                      return true;
                  }
                  


                  <form method="post" action="" onsubmit="return bloquerFormulaire(this);">
                      Contenu de ton formulaire ...
                  </form>
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    31 juillet 2011 à 15:22:53

                    Bonjour,
                    J'ai essayé tout ceci, mais mon problème est toujours le même :(. La page se refresh, il n'y a plus de $_POST[xx], même en laissant les champs vides, ou en remplissant tout correctement, ça n'enregistre pas.

                    <script language="javascript">
                    function bloquerFormulaire(form) {
                        // On verrouille les éléments
                        var els = form.getElementsByTagName('*');
                        for(i = 0 ; i < els.length ; i++) {
                            els[i].disabled = 'disabled';
                        }
                        
                        // On ajoute un message
                        var msg = document.createElement('span');
                        msg.innerText = 'Envoi en cours, veuillez patienter ...';
                        form.appendChild(msg);
                    
                        // On verrouille le formulaire lui même
                        form.onsubmit = function() {
                            return false;
                        }
                    
                        // On envoie le formulaire
                        return true;
                    }
                    </script>
                    
                    <form action="" method="post" enctype="multipart/form-data" onsubmit="return bloquerFormulaire(this);">
                    	<fieldset>
                    	<legend>Formulaire à remplir</legend>
                    		<div class="field">
                    			<label>Sujet :</label>
                    			<input type="text" name="sujet" class="medium" value="<? echo stripslashes($_POST[sujet]);?>" onkeydown="textCounter(this.form.sujet,this.form.textLen,55);" onkeyup="textCounter(this.form.sujet,this.form.textLen,55);" /> <input readonly="readonly" name="textLen" size="3" maxlength="2" value="55" type="text">
                    		</div>  				
                    		</div>
                    		<div class="field">
                    			<label>Joindre un fichier (<u>facultatif</u>) : <strong>gif, jpg, png | 2mo maxi</strong></label>
                    			<input type="file" name="PJTicket" /> 
                    		</div>
                    		<div class="field">
                    			<label>Message :</label>
                    			<textarea rows="7" cols="50" name="message" ><? echo stripslashes($_POST[message]);?></textarea>
                    		</div>
                    		<button type="submit" name="envoyer">Envoyer</button>
                    	</fieldset>
                    </form>
                    


                    Quand je valide, votre code marche très bien, tout se vérouille, puis la page se refresh, et tout se dévéruille.

                    Je comprends pas, vous avez une idée ?

                    En tout cas merci pour toutes vos réponses, j'ai essayé chacune des soluces données et le problème est identique.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      31 juillet 2011 à 15:36:19

                      Ce que tu veux c'est que la personne ne puisse envoyer un document qu'une seule fois ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        31 juillet 2011 à 15:37:49

                        Le script permet d'uploader une pièce jointe sur un message (comme un forum un peu).

                        Donc si la pièce jointe est supérieur a 1mo, ca met 30 / 50s, suivant les connexions, il faut donc que pendant ce laps de temps, le bouton de validation soit grisé, pour ne pas qu'il rappuie dessus en croyant que ça ne marche pas. Le public que je vise est purement novice, c'est le but justement :).
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          31 juillet 2011 à 15:42:04

                          Donc ce code devrait suffire, mais je pense qu'on peut faire mieux comme le dit sebcap26
                          <form id="form1" name="form1" method="post" action="" onsubmit="document.getElementById('button').disabled='diabled'; ">
                            <label for="salut">Salut</label>
                            <input type="file" name="salut" id="salut" />
                            <br />
                            <input type="submit" name="button" id="button" value="Envoyer" />
                          </form>
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            31 juillet 2011 à 15:48:48

                            Je viens de tester, oui ça marche techniquement le bouton se grise.

                            Mais toujours pareil, ça refresh la page, ça ne valide pas mon formulaire, aucune donnée n'est enregistré dans la base de données. Il n'y a même pas mon message d'avertissement disant que un champ est vide alors que j'ai testé en ne rien remplissant.

                            Depuis hier je fais des tests et ça revient exactement au même probleme, ce maudit refresh... Et si j'enlève le onsubmit dans le <form>, ça fonctionne très bien...
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              31 juillet 2011 à 15:50:07

                              On peut avoir ton code en entier ?
                              Sa me parait bizarre...
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                31 juillet 2011 à 16:03:01

                                Re -

                                C'est une page qui a l'origine fais + de 300 lignes et qui nécessite d'être inscrit etc. Donc j'ai viré le maximum que j'ai pu, toutes les requêtes bases de données, histoire de laisser que le PHP/JS/HTML concerné par le problème actuel.

                                On remarque bien que sans le onsubmit, l'erreur s'affiche bien si on valide en laissant tout vide. Or, avec le onsubmit, un pur refresh........

                                Merci d'avance ^^.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  31 juillet 2011 à 16:10:29

                                  premier fichier, première ligne: $_POST[envoyer] => pas de ' !!!
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    31 juillet 2011 à 16:15:07

                                    C'est corrigé, d'habitude je les mets pas dans ce cas-là c'est vrai, car j'ai remarque que avec ou sans ça changeait rien..

                                    Dans la page avec onsubmit, je l'ai corrigé à tous les $_POST, et apparament cela ne vient pas de là.. :(
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      31 juillet 2011 à 16:20:08

                                      Pourquoi tu affiche quelquechose qui à été envoyé par l'utilisateur ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        31 juillet 2011 à 16:32:41

                                        Tu parles des echo $_POST[xx] dans les value des cases ? C'est au cas où il oublie de renseigner un champ, qu'il n'ai pas tout à retapper quoi.

                                        Tout en haut, le if(empty($error)) a l'intérieur je fais un traitement qui stocke le message en bdd, la piece jointe, puis un petit header location pour aller sur une autre page.

                                        Si tu ne parle pas de ça, je comprends pas, j'affiche rien de l'utilisatur
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          31 juillet 2011 à 16:38:26

                                          si si c'est de sa que je parlais.
                                          Comment tu vérifie si sa a bien envoyé, tu peux faire une message (alert js)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            31 juillet 2011 à 17:34:42

                                            Bon j'abandonne, merci quand même pour votre aide :)

                                            Ca fait trop longtemps que je suis sur un si petit détail, j'ai mis une phrase disant de patienter après l'envoie, et puis voilà, s'ils le font pas tant pis pour eux ! Pour mon site ça changera rien il n'y aura pas de doublon :p.

                                            Merci encore pour toute votre aide,
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                              31 juillet 2011 à 17:45:02

                                              Je voulais te donner peut être qqc (mais j'avais pas mis au bon endroit :D )
                                              tu peux essaier encore comme sa (j'ai corrigé 2-3 truc (avec un peu de chance )
                                              <?php
                                              if(isset($_POST['envoyer']))
                                              {
                                              	$message = $_POST['message'];
                                              	$sujet = $_POST['sujet'];
                                              
                                              	if(empty($sujet))
                                              	{
                                              		$error = "Vous devez mettre un sujet.";
                                              	}
                                              
                                              	if(empty($message))
                                              	{
                                              		$error = "Vous devez mettre un message.";
                                              	}
                                              
                                              	if (isset($_FILES['PJTicket']['name']))
                                              	{    
                                              		if($_FILES['PJTicket']['type'] != "image/jpeg" && $_FILES['PJTicket']['type'] != "image/png" && $_FILES['PJTicket']['type'] != "image/gif"){
                                              			$error = "L'extension du fichier n'est pas autorisée.";
                                              		}
                                              
                                              		switch ($_FILES['PJTicket']['error']){    
                                              			case 1: // UPLOAD_ERR_INI_SIZE    
                                              				$error = "Le fichier dépasse la limite autorisée par le serveur ! (2Mo)";    
                                              			break;    
                                              			case 2: // UPLOAD_ERR_FORM_SIZE    
                                              				$error = "Le fichier dépasse la limite autorisée dans le formulaire HTML !";
                                              			break;    
                                              			case 3: // UPLOAD_ERR_PARTIAL    
                                              				$error = "L'envoi du fichier a été interrompu pendant le transfert !";    
                                              			break;       
                                              		}
                                              	}   
                                              
                                              	if(empty($error))
                                              	{ 
                                              		// TOUT MON CODE QUI UPLOAD IMAGE, ENREGISTRE BDD, ETC.
                                              	}
                                              }
                                              ?>
                                              
                                              <script type="text/javascript">
                                              	function textCounter(field, countfield, maxlimit) {
                                              		if (field.value.length > maxlimit) // if too long...trim it!
                                              		field.value = field.value.substring(0, maxlimit);
                                              		// otherwise, update 'characters left' counter
                                              		else 
                                              		countfield.value = maxlimit - field.value.length;
                                              	}
                                              </script>
                                              
                                              <!--Forms-->
                                              <div class="box">
                                              	<div class="header">
                                              		<h2>Création d'un nouveau ticket</h2>
                                              	</div>
                                              	<div class="content padding"> 	
                                              <? 
                                              if(!empty($error))
                                              {
                                              	echo '<p class="message invalid">Erreur : '.$error.'</p>';
                                              }
                                              ?>
                                              		<form action="" method="post" enctype="multipart/form-data" onsubmit="document.getElementById('button').disabled='diabled';">
                                              			<fieldset>
                                              				<legend>Formulaire à remplir</legend>
                                              				<div class="field">
                                              					<label>Sujet :</label>
                                              					<input type="text" name="sujet" class="medium" value="<? echo stripslashes($_POST['sujet']);?>" onkeydown="textCounter(this.form.sujet,this.form.textLen,55);" onkeyup="textCounter(this.form.sujet,this.form.textLen,55);" /> <input readonly="readonly" name="textLen" size="3" maxlength="2" value="55" type="text">
                                              				</div>  
                                              				<div class="field">
                                              					<label>Joindre un fichier (<u>facultatif</u>) : <strong>gif, jpg, png | 2mo maxi</strong></label>
                                              					<input type="file" name="PJTicket" />
                                              					<input type="hidden" name="MAX_FILE_SIZE" value="2097152">    
                                              				</div>
                                              				<div class="field">
                                              					<label>Message :</label>
                                              					<textarea rows="7" cols="50" name="message"><? echo stripslashes($_POST['message']);?></textarea>
                                              				</div>
                                              				<input id="button" type="submit" name="envoyer">Envoyer</button>
                                              			</fieldset>
                                              		</form>
                                              	</div>
                                              </div>
                                              
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                1 août 2011 à 2:00:53

                                                Je n'y connais rien mais je viens plus chercher une réponse parce que ca me percute au yeux.

                                                Voici ton code:
                                                <form id="form1" name="form1" method="post" action="" onsubmit="document.getElementById('button').disabled='diabled'; ">
                                                  <label for="salut">Salut</label>
                                                  <input type="file" name="salut" id="salut" />
                                                  <br />
                                                  <input type="submit" name="button" id="button" value="Envoyer" />
                                                </form>
                                                

                                                Sur:
                                                onsubmit="document.getElementById('button').disabled='diabled';
                                                

                                                'diabled' me choc et je me demandais si c'est pas plutot 'disabled' ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  1 août 2011 à 11:35:24

                                                  C'est une faute de frappa mais sa change rien car tant que disabled n'est pas null il devient indisponible
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Désactiver le bouton submit après envoie

                                                  × 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