Partage
  • Partager sur Facebook
  • Partager sur Twitter

Empêcher la redirection à une autres pages (ajax)

Sujet résolu
    25 octobre 2016 à 19:36:30

    Bonjour, je cherche à créer un formulaire (voir ci-dessous) dans lequel des informations seront vérifiés au clique sur le bouton submit.

    <!-- Fomulaire d'information -->
    			<form id="align" action="./create.html" method="post">
    				<h1> Création d'un article </h1>
    				<div class="conteneur">
    					<label> Fabriquant : </label>
    						<input name="fabriquant" id="fabriquant" class="check" type="text" maxlength="64" autofocus="autofocus" />
    						<span id="check_fabriquant" style="display:none"></span><br/><br/>
    						
    					<label> Code : </label>
    						<input name="code" class="check" type="text" maxlength="32" />
    						<span id="check_fabriquant" style="display:none"></span><br/><br/>
    							
    					<label> Matière :  </label>
    						<input name="matiere" type="text" maxlength="1" value="G" disabled/>
    						<span id="check_matiere" style="display:none"></span><br/><br/>
    						
    					<label> Désignation : </label>
    						<input name="designation" class="check" type="text" maxlength="128" />
    						<span id="check_designation" style="display:none"></span><br/><br/>
    						
    					<label> Prix Unitaire : </label>
    						<input name="prix" class="check" type="number" step="any" maxlength="6" />
    						<span id="check_prix" style="display:none"></span><br/><br/>
    				</div>	
    				<p><input name="creation" id="create" type="submit" value="Créer" /></p>
    			</form>	
    		</div>
    	</body>
    	<script type="text/javascript" src="../commun/jquery.js"></script>	
    </html>

    Pour ça, j'ai créer un script javascript "jquery.js", qui ne gère que le champ fabriquant pour le moment : il faut bien que ça fonctionne déjà sur le premier avant de vouloir l'appliquer sur tous ^^.

    Mon script commence par désactiver le bouton submit, puis il vérifie si le champ est vide : si oui, il va afficher un message d'erreur. Cette partie du code fonctionne parfaitement :

    $(function() {
    	$('#create').click(function(){
    		$('input:submit').attr("disabled", true); 
    		
    		$("#check_fabriquant").removeClass().addClass('messagebox').text('Check en cours...').fadeIn("slow");
    		var valeur = document.getElementById("fabriquant").value;
    		if (valeur.replace(/\s/g,"")=="") {
    			$("#check_fabriquant").fadeTo(200,0.1,function() {
    				$(this).html('Veuillez renseigner ce champ').addClass('obligatoire').fadeTo(900,1);
    			});
    		} 
    	});
    });

    Ensuite, si le champ n'est pas vide, il doit tester si l'informations entrée est valable, depuis ma bdd mysql et affiche OK si oui ou "Fabriquant inconnu" si non. Pour ça j'ai rajouter à la suite de mon code que je vous montre au dessus ceci :

    else {
    			$.post(
    				"../commun/check.php",
    				{ 
    					nom : $("#fabriquant").val(); 
    					valeur : $("#fabriquant").attr("name"); 
    				},
    				function(data) {
    					if(data=='0') { 
    						$("#check_fabriquant").fadeTo(200,0.1,function() {
    							$(this).html('OK').addClass('ok').fadeTo(900,1);
    						});
    					} 
    					else {
    						$("#check_fabriquant").fadeTo(200,0.1,function() {
    							$(this).html('Fabriquant inconnu').addClass('erreur').fadeTo(900,1);
    						});
    					}
    				}
    			);	
    		}


    Et là plus rien de fonctionne comme je le souhaite, même pas la première partie du code.

    J'utilise $.post() (plus pratique que  $.ajax(), mais j'ai le même problème avec les 2 méthodes) pour vérifier le champ avec ma bdd. Le problème est que quand je clique sur le bouton submit je suis redirigé vers la page indiqué dans  le form (action="./create.html"), alors que le bouton submit est sensé être désactivé. Même quand je n'entre rien dans le champ, je suis redirigé vers une autre page alors qu'au départ j'avais bien mon message d'erreur qui s'affichait.

    Si je retire la partie du code  $.post() là j'ai plus de problème, si le champ est vide le message d'erreur s'affiche et je n'ai aucune redirection vers une quelconque page. Mais à partir du moment où j'ajoute  $.post() (ou $.ajax()) là ça fonctionne plus.

    Voilà, auriez vous une idée de mon problème s'il vous plait ? Mon script javascript complet est celui-ci :

    $(function() {
    	$('#create').click(function(){
    		$('input:submit').attr("disabled", true); 
    		
    		$("#check_fabriquant").removeClass().addClass('messagebox').text('Check en cours...').fadeIn("slow");
    		var valeur = document.getElementById("fabriquant").value;
    		if (valeur.replace(/\s/g,"")=="") {
    			$("#check_fabriquant").fadeTo(200,0.1,function() {
    				$(this).html('Veuillez renseigner ce champ').addClass('obligatoire').fadeTo(900,1);
    			});
    		} 
    		else {
    			$.post(
    				"../commun/check.php",
    				{ 
    					nom : $("#fabriquant").val(); 
    					valeur : $("#fabriquant").attr("name"); 
    				},
    				function(data) {
    					if(data=='0') { 
    						$("#check_fabriquant").fadeTo(200,0.1,function() {
    							$(this).html('OK').addClass('ok').fadeTo(900,1);
    						});
    					} 
    					else {
    						$("#check_fabriquant").fadeTo(200,0.1,function() {
    							$(this).html('Fabriquant inconnu').addClass('erreur').fadeTo(900,1);
    						});
    					}
    				}
    			);	
    		}
    	});
    });



    -
    Edité par StevenDouilliet 25 octobre 2016 à 19:41:11

    • Partager sur Facebook
    • Partager sur Twitter
      25 octobre 2016 à 20:19:20

      Salut,

      Desactiver le bouton submit apres avoir clique dessus ne sert a rien (enfin si visuellement il va etre desactive) mais au final le click a deja eu lieu donc il appelle le submit de ton formulaire.

      Mon conseille, enleve le submit, cree juste un boutton de type button

      Et a la fin de ton JS si tout va bien, tu fais un .submit de ton formulaire pour soumettre le tout

      • Partager sur Facebook
      • Partager sur Twitter
        26 octobre 2016 à 0:59:47

        Salut,

        Plus simple et prévu pour : preventDefault();

        L'idée, c'est de choper l'envoi du formulaire, au lieu du clic sur un bouton, et de simplement l'annuler pour faire le traitement désiré.

        En JS vanilla : https://jsfiddle.net/mxx6xx9h/ 
        Ou en jQuery : https://jsfiddle.net/mxx6xx9h/1/  

        -
        Edité par EmmanuelBeziat 26 octobre 2016 à 1:00:46

        • Partager sur Facebook
        • Partager sur Twitter

        Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !

          26 octobre 2016 à 8:48:48

          Bonjour,

          Evite d’appeler ton propre script jquery.js. C'est le nom d'une bibliothèque. Sur un projet perso ca passe peut être (à condition de pas le reprendre quelques années plus tard) mais si tu travailles avec d'autres ils vont pas du tout avoir l'idée d'aller regarder dedans voir pourraient le remplacer par la dernière version de jquery sans voir que ce script n'est pas la véritable bibliothèque.

          • Partager sur Facebook
          • Partager sur Twitter
          Un petit +1 si je vous ai aidé est toujours appréciable :).
            26 octobre 2016 à 15:40:41

            Merci pour les réponses.

            J'ai remplacé mon input par un button et 'ai appliqué la méthode de rhooManu pour suspendre l'envoie. J'ai juste utilisé "$('#create').click(function(event){" au lieu de "$form.on('submit', function (event) {", qui ne fonctionne pas dans mon cas.

            Donc la première partie du code fonctionne, mais j'ai toujours le même problème : dès que j'ajoute la partie ajax il se redirige vers la page indiquée dans action de form :/

            Voici mon code après modification :

            HTML

            <form id="align" action="./create.html" method="post">
            				<h1> Création d'un article </h1>
            				<div class="conteneur">
            					<label> Fabriquant : </label>
            						<input name="fabriquant" id="fabriquant" class="check" type="text" maxlength="64" autofocus="autofocus" />
            						<span id="check_fabriquant" style="display:none"></span><br/><br/>
            						
            					<label> Code : </label>
            						<input name="code" class="check" type="text" maxlength="32" />
            						<span id="check_fabriquant" style="display:none"></span><br/><br/>
            							
            					<label> Matière :  </label>
            						<input name="matiere" type="text" maxlength="1" value="G" disabled/>
            						<span id="check_matiere" style="display:none"></span><br/><br/>
            						
            					<label> Désignation : </label>
            						<input name="designation" class="check" type="text" maxlength="128" />
            						<span id="check_designation" style="display:none"></span><br/><br/>
            						
            					<label> Prix Unitaire : </label>
            						<input name="prix" class="check" type="number" step="any" maxlength="6" />
            						<span id="check_prix" style="display:none"></span><br/><br/>
            				</div>	
            				<p><button id="create" type="submit"> Créer </button></p>
            			</form>	
            		</div>
            	</body>
            	<script type="text/javascript" src="../commun/jquery_check.js"></script>	
            </html>

            Javascript

            $(function() {
            	$('#create').click(function(event){
                    event.preventDefault();
                     
                    $("#check_fabriquant").removeClass().addClass('messagebox').text('Check en cours...').fadeIn("slow");
                    var valeur = document.getElementById("fabriquant").value;
                    if (valeur.replace(/\s/g,"")=="") {
                        $("#check_fabriquant").fadeTo(200,0.1,function() {
                            $(this).html('Veuillez renseigner ce champ').addClass('obligatoire').fadeTo(900,1);
                        });
                    }
            		else {
                        $.post(
                            "../commun/check.php",
                            {
                                nom : $("#fabriquant").val();
                                valeur : $("#fabriquant").attr("name");
                            },
                            function(data) {
                                if(data=='0') {
                                    $("#check_fabriquant").fadeTo(200,0.1,function() {
                                        $(this).html('OK').addClass('ok').fadeTo(900,1);
                                    });
                                }
                                else {
                                    $("#check_fabriquant").fadeTo(200,0.1,function() {
                                        $(this).html('Fabriquant inconnu').addClass('erreur').fadeTo(900,1);
                                    });
                                }
                            }
                        ); 
                    }
                });
            });




            -
            Edité par StevenDouilliet 26 octobre 2016 à 15:41:13

            • Partager sur Facebook
            • Partager sur Twitter
              26 octobre 2016 à 16:06:13

              J'ai juste utilisé "$('#create').click(function(event){" au lieu de "$form.on('submit', function (event) {", qui ne fonctionne pas dans mon cas.

              Quand on se trouve dans un cas comme ça, il faut chercher pourquoi ça ne fonctionne pas plutôt que de rustiner avec autre chose. Essayer des méthodes "qui marchent mais qui ne servent pas à ça" te conduisent dans le problème dans lequel tu es actuellement : ça ne fait pas ce que tu souhaites.

              Essaies de nouveau avec le submit du formulaire, et montre-nous le code ensuite, une fois modifié.

              -
              Edité par EmmanuelBeziat 26 octobre 2016 à 16:07:13

              • Partager sur Facebook
              • Partager sur Twitter

              Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !

                26 octobre 2016 à 18:42:00

                Tu as raison, j'aurais dû chercher pourquoi ça fonctionne pas, désolé :/

                Donc, j'ai modifié le code et l'ai construit en utilisant les info que tu m'avais donné :

                 <!-- Fomulaire d'information -->
                			<form id="align" action="./create.html" method="post">
                				<h1> Création d'un article </h1>
                				<div class="conteneur">
                					<label> Fabriquant : </label>
                						<input name="fabriquant" id="fabriquant" class="check" type="text" maxlength="64" autofocus="autofocus" />
                						<span id="check_fabriquant" style="display:none"></span><br/><br/>
                						
                					<label> Code : </label>
                						<input name="code" class="check" type="text" maxlength="32" />
                						<span id="check_fabriquant" style="display:none"></span><br/><br/>
                							
                					<label> Matière :  </label>
                						<input name="matiere" type="text" maxlength="1" value="G" disabled/>
                						<span id="check_matiere" style="display:none"></span><br/><br/>
                						
                					<label> Désignation : </label>
                						<input name="designation" class="check" type="text" maxlength="128" />
                						<span id="check_designation" style="display:none"></span><br/><br/>
                						
                					<label> Prix Unitaire : </label>
                						<input name="prix" class="check" type="number" step="any" maxlength="6" />
                						<span id="check_prix" style="display:none"></span><br/><br/>
                				</div>	
                				<p><button type="submit"> Créer </button></p>
                			</form>	
                		</div>
                	</body>
                	<script type="text/javascript" src="../commun/jquery_check.js"></script>	
                </html>
                $(function() {
                	var $form = $('form');
                	
                	$form.on('submit', function (event) {
                        event.preventDefault();
                         
                        $("#check_fabriquant").removeClass().addClass('messagebox').text('Check en cours...').fadeIn("slow");
                        var valeur = document.getElementById("fabriquant").value;
                        if (valeur.replace(/\s/g,"")=="") {
                            $("#check_fabriquant").fadeTo(200,0.1,function() {
                                $(this).html('Veuillez renseigner ce champ').addClass('obligatoire').fadeTo(900,1);
                            });
                        }
                		else {
                            $.post(
                                "../commun/check.php",
                                {
                                    nom : $("#fabriquant").val();
                                    valeur : $("#fabriquant").attr("name");
                                },
                                function(data) {
                                    if(data=='0') {
                                        $("#check_fabriquant").fadeTo(200,0.1,function() {
                                            $(this).html('OK').addClass('ok').fadeTo(900,1);
                                        });
                                    }
                                    else {
                                        $("#check_fabriquant").fadeTo(200,0.1,function() {
                                            $(this).html('Fabriquant inconnu').addClass('erreur').fadeTo(900,1);
                                        });
                                    }
                                }
                            ); 
                        }
                    });
                });

                Voici aussi le code où j'appel le script jquery nécessaire pour que le mien fonctionne, au cas où la version, ou autre, ne serait pas bonne pour ce que je souhaite faire :

                <head>
                		<title>AVDA</title>
                		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                		<link href="../css/style.css" rel="stylesheet" type="text/css" />
                		<script type="text/javascript" src="../commun/jquery-1.4.4.min.js"></script>
                	</head>

                Voilà, donc avec "$form.on('submit', function (event) {" au moment où je clique sur le bouton je suis directement redirigé vers une autre page.

                Au fait, je n'apprend le javascript que depuis 5 jours '^^

                -
                Edité par StevenDouilliet 26 octobre 2016 à 18:43:07

                • Partager sur Facebook
                • Partager sur Twitter
                  26 octobre 2016 à 19:30:09

                  Effectivement, si tu n'as pas d'impératifs de rétrocompatibilité, sache qu'on est à la v3 de jQuery (tu peux/devrais) d'ailleurs le charger en bas de page, juste avant ton script jQuery_check. Par contre, il faut le faire AVANT de refermer body, pas après.

                  Bref, ton erreur est dans ton code, lignes 18 et 19 : https://jsfiddle.net/7joL1ow4/2/

                  Ce sont des valeurs d'un objet, ils ne doivent pas être terminés par un point virgules, mais être séparés par une virgule.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !

                    26 octobre 2016 à 20:16:53

                    C'est bon, ça fonctionne. Merci à toi et aux autres pour l'aide fournis.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 octobre 2016 à 2:20:28

                      Je t'en prie. :)

                      Pense à indiquer que ton sujet est résolu.

                      -
                      Edité par EmmanuelBeziat 27 octobre 2016 à 2:20:44

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Il n'y a pas de mauvais navigateur, il n'y a que du mauvais code !

                      Empêcher la redirection à une autres pages (ajax)

                      × 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