OVH Cloud OVH Cloud

onclick et onsubmit

5 réponses
Avatar
elia
Bonjour,

Je n'arrive pas =E0 cummuler deux actions qui doivent se faire sur un
formulaire ayant deux boutons:
(paiement par facture et paiement par Carte de cr=E9dit)

La premi=E8re action fait un lien sur sur deux pages diff=E9rentes
suivant que l'on veut payer par facture ou par carte de cr=E9dit. (2
boutons envoyer)

La deuxi=E8me action est pour ch=E8quer si tous les champs ont =E9t=E9
remplis.

Les deux codes fonctionnent s=E9parement mais ne cohabitent pas!

Pour la premi=E8re action j'ai:

<script language=3D'Javascript'>
function setAction(name) {
if (name=3D=3D"submit1")
document.forms[0].action=3D "facture.php"
else if (name=3D=3D"submit2")
document.forms[0].action=3D "carte_credit.php"
}
</script>

et dans le formulaire:
<input type=3D"submit" id=3D"submit1" onClick=3D"setAction(this.name)"
.=2E.
<input type=3D"submit" id=3D"submit2" onClick=3D"setAction(this.name)"
.=2E.

et pour la deuxi=E8me action j'ai:

<script type=3D"text/javascript">
function verif_champs()
{
if(document.form.nom.value =3D=3D "")
{
alert("Veuillez entrer votre nom SVP");
document.forml.nom.focus();
return false;
}
if(document.form.email.value =3D=3D "")
{
alert("Veuillez nous .......
.=2E.
return confirm("Confirmation de la commande");
}
</script>

et dans le formulaire:
<form name=3D"form" method=3D"post" onSubmit=3D"return verif_champs()" >

Ma question comment ne faire plus qu'une action sur onSubmit ou onClick
??

Merci, pascal

5 réponses

Avatar
ASM
Bonjour,

Je n'arrive pas à cummuler deux actions qui doivent se faire sur un
formulaire ayant deux boutons:
(paiement par facture et paiement par Carte de crédit)


Dis-moi : tu travailles avec PHP ?

Alors il suffit que tes 2 boutons submit aient le même nom
le form envoie ce nom et sa valeur
le php analyse ce nom 'carte de credit' / 'facture'
et agit en conséquence.

Sinon, c'est pas trop mal comme ça :-)
Sauf que ça ne fonctionnera qu'avec IE ... :-(
En effet tes submit-boutons n'ont pas de *nom* ... !

(snip)

et dans le formulaire:
<form name="form" method="post" onSubmit="return verif_champs()" >


Attention ! c'est 'form1' le nom du form :

<form name="form1" action="commande.php" method="post"
onSubmit="return verif_champs()" >

Ma question comment ne faire plus qu'une action sur onSubmit ou onClick
??


Ben ... tu ne peux pas vraiment.
Le JS ne capte pas de lui-même lequel des submits a été cliqué.

Au mieux du moins pire :

<input type="submit" name="envoi" id="submit1" onClick="bout=1"
value="Facture">
<input type="submit" name="envoi" id="submit2" onClick="bout=2"
value="Carte-Crédit">

function verif_champs() {
blabla des if
document.form1.action = bout==1? "facture.php" : "carte_credit.php";
return confirm("Confirmation de la commande");
}

--
ASM

Avatar
elia
Merci ASM pour ton aide mais c'est un peu plus difficile que je croyais
et je n'arrive toujours pas.. hum humm.
Pourquoi ne peut-on pas simplement mettre à la suite la fonction qui
contrôle si tout les champs ont bien été remplie puis après diriger
le lien si tel ou tel bouton a été cliqué?

Soit introduire la deuxième fonction ..

<script language='Javascript'>
function setAction(name) {

......---ici----.......

if (name=="submit1")
document.forms[0].action= "facture.php"
else if (name=="submit2")
document.forms[0].action= "carte_credit.php"
}
</script>


Je travaille bien avec php. J'ai donc essayé ton code que je pense
avoir compris mais..en cliquant sur le bouton rien ne se passe. J'ai
donc:

<script type="text/javascript">
function verif_champs()
{
if(document.forml.nom.value == "")
{
alert("Veuillez entrer votre nom SVP");
document.forml.nom.focus();
return false;
}
if(document.forml.email.value == "")
{
alert("Veuillez nous ...
...etc..
return false;
}
document.form1.action=bout==1?"facture.php" : "carte_credit.php";
return confirm("Confirmation de la commande");
}
</script>

et dans mon formulaire:
<form name="form1" method="post" onSubmit="return verif_champs()">
....
<input name="envoi" type="submit" id="submit1" onclick="bout=1"
value="Facture" />
<input name="envoi" type="submit" id="submit2" onClick="bout=2"
value="Carte de crédit"/>

Voilà, si tu peux encore me dépanner... merci, pascal
Avatar
Pierre Goiffon
elia wrote:
Pourquoi ne peut-on pas simplement mettre à la suite la fonction qui
contrôle si tout les champs ont bien été remplie puis après diriger
le lien si tel ou tel bouton a été cliqué?


On peut, mais alors si JavaScript n'est pas activé sur le navigateur, ou
s'il y a une erreur de script dans la fonction, ou toute autre raison
qui empêcherai l'exécution correcte du JavaScript, alors il devient
impossible de soumettre le formulaire.

Avatar
elia
ouai, merci mais cela ne résout pas mon problème :), pascal
Avatar
ASM
Merci ASM pour ton aide mais c'est un peu plus difficile que je croyais
et je n'arrive toujours pas.. hum humm.


Je n'ai pas testé, mais ce que donné devrait fonctionner.

Pourquoi ne peut-on pas simplement mettre à la suite la fonction qui
contrôle si tout les champs ont bien été remplie puis après diriger
le lien si tel ou tel bouton a été cliqué?


Parce qu'on ne sait *pas* quel bouton a été cliqué ...

Sauf à ce que le bouton le dise lors de son click

<button onclick="..."


Je travaille bien avec php. J'ai donc essayé ton code que je pense
avoir compris mais..en cliquant sur le bouton rien ne se passe. J'ai
donc:


Il faut que ton form ait une 'action'

<form action="commande.php" ... >

Dans ce fichier PHP "commande.php"
tu récupères les variables postées ( nom=Elia&prenom=Pascal ...)
par la fonction php $HTTP_POST_VARS[] par exemple
(enfin ... dans le tableau PHP des valeurs postées)



Exemple de fichier "commande.php" :
(je ne comprends rien au PHP, se renseigner sur le ng php)

<html>
<body>
<h1>Commande</h1>
<?
$nom = $HTTP_POST_VARS['nom'];
$prenom = $HTTP_POST_VARS['prenom'];
$envoi = $HTTP_POST_VARS['envoi'];

$OK = false;

if(isset($nom) && !empty($nom))
$nom = "<p>Nom : $nom";
else {
if(isset($nom)
$nom = "<h2>Veuillez compléter</h2>";
$nom .= "<p>Nom : <input type=text name="nom">";
$OK = false;
}
if(!empty($prenom))
$prenom = "<p>Prénom : $prenom";
else {
if(isset($prenom)
$prenom = "<h2>Veuillez compléter</h2>";
$prenom .= "<p>Prénom : <input type=text name="prenom">";
$OK = false;
}
# ...
$envoyer = "commande.php"
if(isset($envoi) && !empty($envoi) && $OK)
$envoyer = ($envoi=='Facture')?
"facture.php" : "carte_credit.php";
print("
<form action="$envoyer" method='post' name='form1'
onsubmit='return verif_champs()'>
$nom<p>
$prenom<p>
");
if(($envoi=='Facture' && $OK)
echo "<h2>Reglement par facture</h2>";
if(($envoi=='Carte' && $OK)
echo "<h2>Reglement par carte banque</h2>";
if(isset($envoi) && !empty($envoi) && $OK)
print("
<p>Confirmer la commande :
<input type=submit value=Confirmation><p>
");
else
print("
<p>Paiement par :
<input name='envoi' type='submit' value='Facture' />
<input name='envoi' type='submit' value='Carte'/><p>
<form>
");
?>
</body>
</html>


voir :
http://www.phpdebutant.org/
http://www.siteduzero.com/tuto-3-4-0-un-site-dynamique-avec-php.html
http://www.siteduzero.com/tuto-3-70-1-les-variables.html#ss_part_4

--
ASM