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

valider un formulaire avec multiples submit

8 réponses
Avatar
Raphaël Wils
Bonjour

J'essaye de valider un formulaire ayant plusieurs boutons submit.

résumé du code (XHTML1.0 strict) :

<form action="/admin/index.php" method="post" accept="text/plain"
enctype="multipart/form-data" onsubmit="valider(this);">
...
<input type="submit" name="submit" value="Enregistrer" />
<input type="submit" name="submit" value="Ouvrir" />
<input type="submit" name="submit" value="Visualiser" />
<input type="submit" name="submit" value="Télécharger" />
<input type="submit" name="submit" value="Supprimer" />
</form>

Je désire le valider d'abors en javascript, le probleme est que je
n'arrive pas à détecter quel bouton submit a été utilisé. si j'écris

function valider(frm){
alert(frm.elements['submit'].value);
return true;
}

la boite alert affiche "undefined".
Par contre en php je n'ai pas de probleme. Mais je voudrais quand meme
faire une validation coté client en premier lieu.

--
Raphaël
http://www.r-wils.com/perso
« Don't mean a thing if you ain't got that swing ! »

8 réponses

Avatar
YD

J'essaye de valider un formulaire ayant plusieurs boutons submit.

résumé du code (XHTML1.0 strict) :

<form action="/admin/index.php" method="post" accept="text/plain"
enctype="multipart/form-data" onsubmit="valider(this);">


Tu voulais dire bien sûr : onsubmit="return valider(this);"

...
<input type="submit" name="submit" value="Enregistrer" />
<input type="submit" name="submit" value="Ouvrir" />
<input type="submit" name="submit" value="Visualiser" />
<input type="submit" name="submit" value="Télécharger" />
<input type="submit" name="submit" value="Supprimer" />
</form>

Je désire le valider d'abors en javascript, le probleme est que je
n'arrive pas à détecter quel bouton submit a été utilisé. si j'écris

function valider(frm){
alert(frm.elements['submit'].value);
return true;
}

la boite alert affiche "undefined".


Ce qui est normal ;-)

frm.elements['submit'] est une collection des éléments qui ont pour
attribut name la valeur 'submit', une collection puisqu'il y en a
plusieurs. Pour accéder aux différents éléments il faut utiliser
frm.elements['submit'][n].value (n de 0 à 4)

Ce n'est pas une réponse à ta question. Je ne sais pas si on peut accéder
directement aux valeurs envoyées par le formulaire, ce qui serait la seule
façon de savoir quel bouton a été cliqué.

Un contournement simple (mais un peu lourd) serait de positionner une variable
avec l'événement onclick sur chaque bouton (genre onclick="foo=this.value;") et
de lire cette variable dans ta fonction de validation.

Pas très satisfaisant, c'est sûr...

--
Y.D.

Avatar
Bul
bonjour,
ou d'envoyer ( ou pas ) le formulaire
dans la function valider en remplaçant
les <input type=submit par
<input type=button ?
<script type="text/javascript">
function valider(frm)
{ alert(frm.value);
form1.submit(); // pour envoyer
}
</script>
</HEAD>
<BODY>
<form name="form1"
action="/admin/index.php"
method="post"
accept="text/plain"
enctype="multipart/form-data">
<input type="button" name="submit" value="Enregistrer"
onclick="valider(this);"/>
<input type="button" name="submit" value="Ouvrir"
onclick="valider(this);"/>
<input type="button" name="submit" value="Visualiser"
onclick="valider(this);"/>
<input type="button" name="submit" value="Télécharger"
onclick="valider(this);"/>
<input type="button" name="submit" value="Supprimer"
onclick="valider(this);"/>
</form>
@+
Avatar
Baroiller Pierre-Emmanuel
nommes peut-être déjà différement des bouton (submit1,submit2,submit3,
etc...)
sinon, mets plutot submit[0] submit[1] submit[2], etc...
car là, tu as plusieurs fois le même "nom" pour un champ, js ne pourra
jamais le retrouver ;)

a+

"Raphaël Wils" a
écrit dans le message de
news:411b9794$0$313$
Bonjour

J'essaye de valider un formulaire ayant plusieurs boutons submit.

résumé du code (XHTML1.0 strict) :

<form action="/admin/index.php" method="post" accept="text/plain"
enctype="multipart/form-data" onsubmit="valider(this);">
...
<input type="submit" name="submit" value="Enregistrer" />
<input type="submit" name="submit" value="Ouvrir" />
<input type="submit" name="submit" value="Visualiser" />
<input type="submit" name="submit" value="Télécharger" />
<input type="submit" name="submit" value="Supprimer" />
</form>

Je désire le valider d'abors en javascript, le probleme est que je
n'arrive pas à détecter quel bouton submit a été utilisé. si j'écris

function valider(frm){
alert(frm.elements['submit'].value);
return true;
}

la boite alert affiche "undefined".
Par contre en php je n'ai pas de probleme. Mais je voudrais quand meme
faire une validation coté client en premier lieu.

--
Raphaël
http://www.r-wils.com/perso
« Don't mean a thing if you ain't got that swing ! »


Avatar
Raphaël Wils
YD wrote:


J'essaye de valider un formulaire ayant plusieurs boutons submit.

résumé du code (XHTML1.0 strict) :

<form action="/admin/index.php" method="post" accept="text/plain"
enctype="multipart/form-data" onsubmit="valider(this);">



Tu voulais dire bien sûr : onsubmit="return valider(this);"

...
<input type="submit" name="submit" value="Enregistrer" />
<input type="submit" name="submit" value="Ouvrir" />
<input type="submit" name="submit" value="Visualiser" />
<input type="submit" name="submit" value="Télécharger" />
<input type="submit" name="submit" value="Supprimer" />
</form>

Je désire le valider d'abors en javascript, le probleme est que je
n'arrive pas à détecter quel bouton submit a été utilisé. si j'écris

function valider(frm){
alert(frm.elements['submit'].value);
return true;
}

la boite alert affiche "undefined".



Ce qui est normal ;-)

frm.elements['submit'] est une collection des éléments qui ont pour
attribut name la valeur 'submit', une collection puisqu'il y en a
plusieurs. Pour accéder aux différents éléments il faut utiliser
frm.elements['submit'][n].value (n de 0 à 4)

Ce n'est pas une réponse à ta question.


J'en prend bonne note quand meme.

Je ne sais pas si on peut accéder
directement aux valeurs envoyées par le formulaire, ce qui serait la seule
façon de savoir quel bouton a été cliqué.

Un contournement simple (mais un peu lourd) serait de positionner une
variable
avec l'événement onclick sur chaque bouton (genre
onclick="foo=this.value;") et
de lire cette variable dans ta fonction de validation.

Pas très satisfaisant, c'est sûr...


J'ai essayé cette solution mais il s'emble que l'évenement onclick ne se
propage pas.

--
Raphaël
http://www.r-wils.com/perso
« Don't mean a thing if you ain't got that swing ! »


Avatar
Raphaël Wils
Bul wrote:

bonjour,
ou d'envoyer ( ou pas ) le formulaire
dans la function valider en remplaçant
les <input type=submit par
<input type=button ?
<script type="text/javascript">
function valider(frm)
{ alert(frm.value);
form1.submit(); // pour envoyer
}
</script>
</HEAD>
<BODY>
<form name="form1"
action="/admin/index.php"
method="post"
accept="text/plain"
enctype="multipart/form-data">
<input type="button" name="submit" value="Enregistrer"
onclick="valider(this);"/>
<input type="button" name="submit" value="Ouvrir"
onclick="valider(this);"/>
<input type="button" name="submit" value="Visualiser"
onclick="valider(this);"/>
<input type="button" name="submit" value="Télécharger"
onclick="valider(this);"/>
<input type="button" name="submit" value="Supprimer"
onclick="valider(this);"/>
</form>
@+


Le probleme de cette solution c'est que si jamais javascript est
désactivé le formulaire ne sera jamais envyé
ce que je voudrais éviter pour des raisons d'accessibilité.

Peut être que ceci marcherait ?
<input type="submit" name="submit" value="Enregistrer"
onclick="valider(this.value);"/>


et quelque part dans ma fonction valider :
document.forms[0].submit ???
--
Raphaël
http://www.r-wils.com/perso
« Don't mean a thing if you ain't got that swing ! »

Avatar
Bobe
Raphaël Wils nous a dit le 12/08/2004 18:14:

J'essaye de valider un formulaire ayant plusieurs boutons submit.

[snip code]

Je désire le valider d'abors en javascript, le probleme est que je
n'arrive pas à détecter quel bouton submit a été utilisé. si j'écris

function valider(frm){
alert(frm.elements['submit'].value);
return true;
}

la boite alert affiche "undefined".



C'est normal, comme il y a plusieurs éléments de même nom,
frm.elements['submit'] renvoie une collection (un tableau).

Je vois deux solutions. Si c'est un intranet sous Mozilla ou dérivés, tu peux
utiliser l'attribut explicitOriginalTarget (non normalisé) de l'objet d'évènement:

<form action="/admin/index.php" method="post" accept="text/plain"
enctype="multipart/form-data" onsubmit="valider(this, event);">

Et dans la fonction valider():
var boutonActive = event.explicitOriginalTarget; // l'objet représentant le
bouton ayant été utilisé pour soumettre le formulaire

Sinon, deux évènement seront nécessaires:

<form action="/admin/index.php" method="post" accept="text/plain"
enctype="multipart/form-data" onsubmit="valider(this);" onclick="stock(event);">

function stock(e)
{
if( !e ) // MS
{
var cible = window.event.srcElement;
}
else
{
var cible = e.target;
}

if( cible.nodeName.toLowerCase() == 'input' && cible.type == 'submit' )
{
buttonActif = cible.value;
}
}

--
Bobe (Aurélien Maille)
http://webnaute.net

"la vie d'un geek est un combat perpétuel contre l'imperfection"

Avatar
Raphaël Wils
Raphaël Wils wrote:

Bonjour

J'essaye de valider un formulaire ayant plusieurs boutons submit.

résumé du code (XHTML1.0 strict) :

<form action="/admin/index.php" method="post" accept="text/plain"
enctype="multipart/form-data" onsubmit="valider(this);">
...
<input type="submit" name="submit" value="Enregistrer" />
<input type="submit" name="submit" value="Ouvrir" />
<input type="submit" name="submit" value="Visualiser" />
<input type="submit" name="submit" value="Télécharger" />
<input type="submit" name="submit" value="Supprimer" />
</form>

Je désire le valider d'abors en javascript, le probleme est que je
n'arrive pas à détecter quel bouton submit a été utilisé. si j'écris

function valider(frm){
alert(frm.elements['submit'].value);
return true;
}

la boite alert affiche "undefined".
Par contre en php je n'ai pas de probleme. Mais je voudrais quand meme
faire une validation coté client en premier lieu.



Bon la seule solution que j'ai trouvé c'est de mettre dans chaque bouton
submit un onclick="valider(this.value)"

Et dans ma fonction valider je met document.forms[0].submit si les
conditions adéquates sont remplies

C'est un peu bancal mais ça marche, meme sans javascript...

Pour répondre à Bobe ce n'est pas un intranet, juste un micro cms en
wiki pour mon site et celui d'amis... la solution que tu proposes marche
bien dans mozilla mais pas dans ie6 (comme d'hab me direz vous).

--
Raphaël
http://www.r-wils.com/perso
« Don't mean a thing if you ain't got that swing ! »

Avatar
roxroxane
pour régler ton problème, tu te crée une variable hidden pour contenir la valeur de ton bouton et sur chacun de tes boutons avec l'action "onClick" tu change la valeur de ta variable dans un script.

->document.getElementById('submit').value = "open";


quand tu arrive dans tes validations la valeur de "document.getElementById('submit').value" celle-ci contient la valeur que tu as besoin.