Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

contrôles de formulaire

14 réponses
Avatar
docanski
Bonsoir,

Je sèche sur un problème simple (et sans doute récurrent mais désolé, je
n'ai pas trouvé de fil à ce sujet dans les 300 derniers messages) et je
ne retrouve plus ma doc.
En cause, le formulaire suivant :

<form action="traitement.php" method="post" id="form">
<snip> le contenu du formulaire
<input type="button" name="submit" value="Envoyer"
onClick="verifForm(this.form)" />
</form>

avec le script kivabien :

<script type="text/javascript">
function verifForm(armo)
{
if(armo.Nom.value == "")
{alert('Attention : vous avez oublié de taper votre nom !');
this.form.Nom.focus();
return false;}
//.... snip les contrôles suivants ...//
if(armo.Email.value == "")
{alert('Attention : vous avez oublié de taper votre Email !');
this.form.Email.focus();
return false;}
else {return true;}
}
</script>

Si le script fait bien son office, champ après champ, le problème est
qu'au dernier contrôle corrigé le formulaire n'est pas envoyé et reste
stoïque. :-(

Mes vagues souvenirs de JS (j'ai abandonné depuis quelques années et ne
retrouve plus ma bibliothèque de scripts non plus :-( ) m'ont poussé à
tenter :

<form action="traitement.php" method="post" id="form" onSubmit
="verifForm(this.form)">
avec un <input type="submit"> cette fois mais dans ce cas le JS n'est
même pas opérationnel et le formulaire est envoyé directement sans contrôle.
Quelque chose m'échappe donc ... mais quoi ?
Quelqu'un pourrait-il se substituer à mon neurone désormais défaillant ?
Merci d'avance pour vos lumières.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor/free.fr/

10 réponses

1 2
Avatar
YD
<form action="traitement.php" method="post" id="form" onSubmit
="verifForm(this.form)">
avec un <input type="submit">


J'écrirais plutôt
<form action="traitement.php" method="post" id="form"
onSubmit="return verifForm(this)">

--
Y.D.

Avatar
SAM
Bonsoir,


Bonsoir, jour,


Quelque chose m'échappe donc ... mais quoi ?
Quelqu'un pourrait-il se substituer à mon neurone désormais défaillant ?
Merci d'avance pour vos lumières.


Outre la remarque d'Yves, il ne faut pas de else à la fin (*)

this.form.Email.focus();
return false;
}
return true;
}
</script>


(*) Pourquoi ?
parce que il n'y en a pas avant
et surtout parce que ce n'est pas une option
vu que pour les conditions précédentes on retourne false
(pas certain de bien me faire comprendre ...)

Prendre l'habitude d'alinéater un minima ça aide.
en particulier les } fermantes
à la ligne et au bon alinéa
pour bien séparer les actions

--
sm

Avatar
docanski
Eleveurs et agriculteurs polluent toujours la Bretagne et YD nous narre
ce qui suit en ce 28/11/2007 20:01 :

J'écrirais plutôt
<form action="traitement.php" method="post" id="form"
onSubmit="return verifForm(this)">


Le problème est qu'avec <onSubmit">, lorsqu'on ferme la fenêtre d'alerte
pour remplir le 1er champ contrôlé et "false" ... le script envoie
immédiatement le formulaire sans qu'on puisse agir ! :-(
C'est pourquoi j'avais essayé <input="button"> qui, lui, permet bien de
corriger les champs au fur et à mesure des alertes mais bloque l'action
sur le bouton lorsque tous les contrôles sont effectués : impossible
d'envoyer le formulaire.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor/free.fr/

Avatar
SAM
Eleveurs et agriculteurs polluent toujours la Bretagne et YD nous narre
ce qui suit en ce 28/11/2007 20:01 :

J'écrirais plutôt
<form action="traitement.php" method="post" id="form"
onSubmit="return verifForm(this)">


Le problème est qu'avec <onSubmit">, lorsqu'on ferme la fenêtre d'alerte
pour remplir le 1er champ contrôlé et "false" ... le script envoie
immédiatement le formulaire sans qu'on puisse agir ! :-(


Non, pas si on met

onsubmit=" return mafonction(); "
^^^^^^
le submittage attendra de savoir si la fonction va lui donner le feu vert

le champ n'est pas rempli ? hop ! feu rouge : false
... pas d'envoi et fin de la fonction
le champ est rempli ? hop ! on passe à la vérif suivante

si la dernière vérif ne renvoie pas false
il ne reste qu'à envoyer true (le feu vert) et sans autre condition :
pas de else

C'est pourquoi j'avais essayé <input="button"> qui, lui, permet bien de
corriger les champs au fur et à mesure des alertes mais bloque l'action
sur le bouton lorsque tous les contrôles sont effectués : impossible
d'envoyer le formulaire.


le bouton (comme tout onclick) peut fonctionner de la même manière :
attendre le feu vert

... encore faut-il qu'un feu vert arrive.


--
sm


Avatar
YD
C'est pourquoi j'avais essayé <input="button"> qui, lui, permet bien de
corriger les champs au fur et à mesure des alertes mais bloque l'action
sur le bouton [...]


le bouton (comme tout onclick) peut fonctionner de la même manière :
attendre le feu vert

.... encore faut-il qu'un feu vert arrive.


Et qu'il sache où aller après !

Dans le premier post il y a :
<input type="button" name="submit" value="Envoyer"
onClick="verifForm(this.form)" />

qu'il faudrait bien corriger par
<input type="button" name="submit" value="Envoyer"
onClick="if(verifForm(this.form)) this.form.submit();" />

--
Y.D.


Avatar
SAM

le bouton (comme tout onclick) peut fonctionner de la même manière :
attendre le feu vert

.... encore faut-il qu'un feu vert arrive.


Et qu'il sache où aller après !

Dans le premier post il y a :
<input type="button" name="submit" value="Envoyer"
onClick="verifForm(this.form)" />


Ooops !

Je n'avais pas capté que ce n'était pas un submit !
Ça m'apprendra à répondre sur des aprioris sans vraiment lire :-(

qu'il faudrait bien corriger par
<input type="button" name="submit" value="Envoyer"
onClick="if(verifForm(this.form)) this.form.submit();" />


--
sm


Avatar
docanski
Eleveurs et agriculteurs polluent toujours la Bretagne et SAM nous narre
ce qui suit en ce 29/11/2007 1:46 :

Le problème est qu'avec <onSubmit">, lorsqu'on ferme la fenêtre
d'alerte pour remplir le 1er champ contrôlé et "false" ... le script
envoie immédiatement le formulaire sans qu'on puisse agir ! :-(


Non, pas si on met

onsubmit=" return mafonction(); "
^^^^^^
le submittage attendra de savoir si la fonction va lui donner le feu vert


La balise <form> le contient, comme écrit dans le message initial :
<form action="traitement.php" method="post" id="form" onSubmit
="verifForm(this.form)">

le champ n'est pas rempli ? hop ! feu rouge : false
... pas d'envoi et fin de la fonction


Résultat de ce qui précède : la fenêtre d'alerte signale l'oubli et
lorsque l'utilisateur la ferme, le formulaire est *directement* envoyé,
sans possibilité de remplir le champ.

il ne reste qu'à envoyer true (le feu vert) et sans autre condition :
pas de else


C'est fait comme ceci (extrait) :
<script>
function verifForm(armo)
{
if(armo.Email.value == "")
{alert('Attention : vous avez oublié de taper votre Email !');
this.form.Email.focus();
return false;}
return true;
}
</script>

... mais ne fonctionne pas et donne le résultat signalé ci-dessus.

C'est pourquoi j'avais essayé <input="button"> qui, lui, permet bien
de corriger les champs au fur et à mesure des alertes mais bloque
l'action sur le bouton lorsque tous les contrôles sont effectués :
impossible d'envoyer le formulaire.


le bouton (comme tout onclick) peut fonctionner de la même manière :
attendre le feu vert


J'ai corrigé cette 2ème possibilité comme YD le propose (à qui je
réponds en même temps ici) en :
<input type="button" name="submit" value="Envoyer"
onClick="if(verifForm(this.form)) this.form.submit();" />
(sans condition dans le <form> cette fois, puisqu'elle est ci-dessus)
où la fermeture de la fenêtre d'alerte permet de corriger le champ non
rempli ... mais bloque le submit ensuite : pas d'envoi du formulaire.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor/free.fr/


Avatar
Olivier Miakinen

onsubmit=" return mafonction(); "
^^^^^^
le submittage attendra de savoir si la fonction va lui donner le feu vert



Le 29/11/2007 11:30, docanski a répondu :

La balise <form> le contient, comme écrit dans le message initial :
<form action="traitement.php" method="post" id="form" onSubmit
="verifForm(this.form)">


SAM a pourtant pris soin de souligner le « return » qui est dans sa
version et pas dans la tienne...


Avatar
SAM

J'ai corrigé cette 2ème possibilité comme YD le propose
(...)

bloque le submit ensuite : pas d'envoi du formulaire.



et ceci est-ce que ça fonctionnerait :

<html>
<form action="test.htm" onsubmit="return verif(this);">
email : <input type=text name="email">
<input type=submit>
</form>
<script type="text/javascript">
function verif(f) {
if(f.email.value.length<1 || f.email.value.indexOf('@')<0) {
alert('pas good');
f.email.focus();
f.email.select();
return false;
}
return true;
}
</script>
</html>



car chez moi c'est OK


corrigé :

<script>
function verifForm( armo )
{
if(armo.Email.value == "")
{alert('Attention : vous avez oublié de taper votre Email !');
armo.Email.focus(); /* ici ce n'est pas this.form */
armo.Email.select(); /* mais l'argument 'armo' */
return false;}
return true;
}
</script>


Firefox et sa console d'erreur aurait dû te dire que la ligne x était
fausse (celle this.form.Email ...)

--
sm

Avatar
docanski
Eleveurs et agriculteurs polluent toujours la Bretagne et Olivier
Miakinen nous narre ce qui suit en ce 29/11/2007 11:58 :

Le 29/11/2007 11:30, docanski a répondu :
La balise <form> le contient, comme écrit dans le message initial :
<form action="traitement.php" method="post" id="form" onSubmit
="verifForm(this.form)">


SAM a pourtant pris soin de souligner le « return » qui est dans sa
version et pas dans la tienne...


Désolé mais mon copier-coller de l'essai n'était pas le bon et j'ai bien
utilisé :
<form action="traitement.php" method="post" id="form" onSubmit ="return
verifForm(this); ">
... qui ne fonctionne pas.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor/free.fr/


1 2