Formulaire envoyé malgré le return false

pistolero_35 Messages postés 7 Statut Membre -  
pistolero_35 Messages postés 7 Statut Membre -
Bonjour,

je suis débutant donc soyez indulgents merki :)

alors voila, j'ai un formulaire basique et avant de l'envoyer je veux faire une premiere verification javascript, ma fonction javascript est créée et semble fonctionner, j'ai mis des alert qui s'affichent comme il faut. Cette fonction javascript est lancée sur le onsubmit de mon formulaire.

je realise les tests et systematiquement meme apres des return false dans ma fonction le formulaire est envoyé. pouvez vous m'aider, merci d'avance !

voici mes codes
Le formulaire :
<h3> Informations de facturation</h3>
<form name="formulaire_commande" method="POST" action="fin_commande.php" onsubmit="return verification_formulaire();" >
<div class="nom_champ">Prénom : </div>
<div class="champ"><input class="champ" type="text" name="prenom_fac" value="" size="20" maxlength="50" /></div>
<div class="nom_champ">Nom : </div>
<div class="champ"><input class="champ" type="text" name="nom_fac" value="" size="20" maxlength="50" /></div>
<div class="nom_champ">Adresse : </div>
<div class="champ"><input class="champ" type="text" name="adresse_fac" value="" size="20" maxlength="150" /></div>
<div class="nom_champ">Ville : </div>
<div class="champ"><input class="champ" type="text" name="ville_fac" value="" size="20" maxlength="50" /></div>
<div class="nom_champ">Code Postal : </div>
<div class="champ"><input class="champ" type="text" name="cp_fac" value="" size="20" maxlength="50" /></div>
<div class="nom_champ">Téléphone : </div>
<div class="champ"><input class="champ" type="text" name="tel_fac" value="" size="20" maxlength="50" /></div>
<div class="nom_champ">E-mail : </div>
<div class="champ"><input class="champ" type="text" name="mail_fac" value="" size="20" maxlength="50" /></div>

et un peu plus loin dans la page HTML:
<input type="submit" value="envoyer le formulaire"/>
</form>

Ma fonction javascript :
function verification_formulaire(){
var nom1=document.forms['formulaire_commande'].elements['nom_fac'].value;
var prenom1=document.forms['formulaire_commande'].elements['prenom_fac'].value;
var rue1=document.forms['formulaire_commande'].elements['adresse_fac'].value;
var code_postal1=document.forms['formulaire_commande'].elements['cp_fac'].value;
var ville1=document.forms['formulaire_commande'].elements['ville_fac'].value;
var mail1=document.forms['formulaire_commande'].elements['mail_fac'].value;
var telephone1=document.forms['formulaire_commande'].elements['tel_fac'].value;

if(nom1 == "") {
alert("Veuillez entrer votre nom!");
nom1.focus();
return false;
}

if(prenom1 == "") {
alert("Veuillez entrer votre prénom!");
prenom1.focus();
return false;
}

if(rue1 == "") {
alert("Veuillez entrer votre rue!");
rue1.focus();
return false;
}

if(code_postal1 == "") {
alert("Veuillez entrer votre code postal!");
code_postal1.focus();
return false;
}

var chkZ = 1;
for(i=0;i<code_postal1.length;++i)
if(code_postal1.charAt(i) < "0"
|| code_postal1.charAt(i) > "9")
chkZ = -1;
if(chkZ == -1) {
alert("Cette mention n'est pas un nombre!");
code_postal1.focus();
return false;
}
if(ville1 == "") {
alert("Veuillez entrer votre lieu de résidence!");
ville1.focus();
return false;
}

if(mail1 == "") {
alert("Veuillez entrer votre adresse électronique!");
mail1.focus();
return false;
}
if (mail1.search(/^[_a-z0-9-]+(.[_a-z0-9-]+)*[^._-]@[a-z0-9-]+(.[a-z0-9]{2,4})*$/) == -1)
{ alert("Veuillez entrer une adresse électronique correcte");
mail1.focus();
return false;
}
if(mail1.indexOf('@') == -1) {
alert("Ce n'est pas une adresse électronique!");
mail1.focus();
return false;
}

}

pisto

8 réponses

Defouille Messages postés 404 Statut Membre 54
 
Bonjour,

j'ai pas tout regardé, mais je pense que ton erreur vient du fait que tu appelles ta fonction sur le "onsubmit", cela veut dire que ta fonction est appelée, puis le submit est fait, quelque soit l'action de ta fonction.

Essaye plutôt de l'appeler sur le onclick de ton bouton, et a la fin de ta fonction si tout est ok tu fais quelque chose du style :

document.getElementById('mon_formulaire').submit();


sinon rien.
Ca devrait mieux marcher. =)
0
pistolero_35 Messages postés 7 Statut Membre
 
hum je te remercie de la réponse rapide Defouille.

cependant j'explique ma démarche, je pensais qu'avec return devant le nom de ma fonction dans onsubmit celà envoi le formulaire seulement si j'ai bien un retour true a ma fonction javascript.

je n'ai pas choisi le onclick car si on tape sur entrée avec onclick ça ne déclenche rien alors que onsubmit si.

dernier point, et ce qui me gène un peu dans ta solution est que je voudrais que mon formulaire soit envoyé même si l'utilisateur n'a pas le javascript or si je comprend la réponse que tu me donnes, ça serait dans la fonction javascript que tu déclenches ou pas l'envoi du formulaire?

mon but par cette fonction javascript est une vérification qui permet de ne pas avoir a rechearger la page pour les possesseur d'un javascript activé, mais je fait aussi une verif PHP après l'envoi, je ne veux donc pas une solution qui oblige l'utilisateur a avoir le javascript activé mais s'il l'a alors il gagne du temps en n'ayant pas a recharger la page tant que son formaulaire n'est pas bon.

je cogite quand meme ce que tu m'a donné Defouille :)

pisto
0
Defouille Messages postés 404 Statut Membre 54
 
Re, j'ai trouvé l'erreur.
En fait tu as un problème dans ton javascript :

var nom1=document.forms['formulaire_commande'].elements['nom_fac'].value;
var prenom1=document.forms['formulaire_commande'].elements['prenom_fac'].value;
var rue1=document.forms['formulaire_commande'].elements['adresse_fac'].value;
var code_postal1=document.forms['formulaire_commande'].elements['cp_fac'].value;
var ville1=document.forms['formulaire_commande'].elements['ville_fac'].value;
var mail1=document.forms['formulaire_commande'].elements['mail_fac'].value;
var telephone1=document.forms['formulaire_commande'].elements['tel_fac'].value; 

il s'agit ici de valeurs, si tu fais :

nom1.focus(); 

ca fait une erreur javascript, et donc pas de return false, et donc le submit... (et encore plus vil, tu vois même pas l'erreur avec firebug :p)

Du coup :
document.forms['formulaire_commande'].elements['nom_fac'].focus
à la place
et c'est comme "Mars" ça repart ('-.-).

NB : n'oublie pas de rajouter un "return true" à la fin de ta fonction (enfin c'est pas très utile mais plus propre ^^)
0
pistolero_35 Messages postés 7 Statut Membre
 
ah ben ça aide les gens competents, je regarde de suite et je viens poster ce qu'il en est :)

j'admet avoir passé plus de temps a apprendre PHP que javascript ou je me suis juste amusé a vouloir rajouté quelques ptits trucs interessants pour l'utilisateur.

y'a 2 mois je savais meme pas ce qu'etait PHP , javascript et XHTML alors l'assimilation forcée a ses limites

pisto
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Defouille Messages postés 404 Statut Membre 54
 
Bah tu te débrouilles déjà très bien ^^
0
pistolero_35 Messages postés 7 Statut Membre
 
ok bon alors déjà ce que tu m'as corrigé est bon Defouille concernant les valeurs
j'ai fait ça

var nom1=document.forms['formulaire_commande'].elements['nom_fac'];

if(nom1.value == "") {
alert("Veuillez entrer votre nom!");
nom1.focus();
return false;
}
else
{
return true;
}

et si le nom est vide ça ne me balance pas sur l'autre page. je dois cependant avoir fait du copié coller comme un truand sur les fonctions plus évoluées que j'utilise concernant les mails ou autre car si j'utilise la fonction en entier ça continue de m'envoyer le formulaire, signe d'une erreur dans ma fonction javascript je suppose. mais au moins j'ai une bonne base et je vais pouvoir avancer en sachant ou chercher :) et si tu as du temps tu es le bienvenu pour le faire aussi hihi :)

pisto
0
Defouille Messages postés 404 Statut Membre 54
 
Toujours alert puis submit ? C'est quoi ton erreur quand tu utilises toute ta fonction modifiée ?
0
pistolero_35 Messages postés 7 Statut Membre
 
zouplaa, me revoilou, en fait c'est en modifiant que j'ai fait une erreur, mauvais placement d'un return true qui m'a enduit d'erreur, mais c'est ok maintenant ça marche :)

merci beaucoup pour ton aide précieuse Defouille.

pisto qui va feter ça avec un verre de jus d'orange :)
0