Désactiver un bouton submit à l'envoi du formulaire

Eléphant du PHP | 337 Messages

27 août 2006, 15:51

Bonjour,

Tout est dans le titre : j'aimerais pouvoir désactiver un bouton submit une fois qu'il a été cliqué, afin d'éviter notamment des doubles posts.

Je pensais que ce serait simple, mais en fait j'ai essayé pas mal de solutions et rien ne marche. Quelqu'un connaît-il la solution ?

Merci de votre aide !

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

27 août 2006, 16:07

à main levée, sans tester, je te propose quelque chose du genre :

Code : Tout sélectionner

<input type="button" onclick="this.disabled='disabled';form.submit();" />

Eléphant du PHP | 337 Messages

28 août 2006, 03:28

Ça fait partie des solutions que j'ai essayé, mais il se produit qqchose que je ne m'explique pas quand je procède comme ça : le formulaire est bien envoyé (quand je réactualise, il m'affiche le message "Cliquez sur Recommencer pour renvoyer les informations etc."), mais je ne récupère pas les valeurs.

De plus, j'ai un javascript qui vérifie que certains champs sont obligatoires, placé sur onSubmit dans la balise <form>, mais quand j'utilise le code ci-dessus, cette vérification ne fonctionne plus (alors qu'avec un bouton de type submit, ça roule tout seul).

Je tourne en bourrique avec ce problème, c'est agaçant :lol:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 août 2006, 11:08

L'action onSubmit="" d'un formulaire n'est déclenchée que lors de la soumission du formulaire via un bouton submit ou une image. La fonction formulaire.submit() ne l'exécute pas et il te faut donc appeller ta fonction de contrôle avant cette commande (ou la lancer depuis ta fonction de contrôle) :)

Par ailleurs, un champ désactivé n'est pas envoyé. Si tu te bases sur la présence du nom du bouton de soumission pour exécuter ton traitement, il est normal que celui-ci ne se fasse plus :)

Eléphant du PHP | 337 Messages

28 août 2006, 13:32

C'est vrai que je détecte l'envoi du formulaire avec un if(isset($_POST['valid'])) ... Je vais essayer autre chose alors : )

Eléphant du PHP | 377 Messages

28 août 2006, 15:39

L'action onSubmit="" d'un formulaire n'est déclenchée que lors de la soumission du formulaire via un bouton submit ou une image
Ah bon? J'ai un doute là, je dirais plutot qu'il vaut mieux utiliser le onsubmit sur le formulaire que le onclick sur le submit, parce qu'en cas de validation par la touche Entrée, le onsubmit sera pris en compte et pas le onclick.
Pour ton probleme de if(isset($_POST['valid'])), teste un autre champ que tu as rendu obligatoire, ou bien essaie if(is_array($_POST)) (je ne suis pas sur de ca, je dirais que $_POST est un tableau par défaut et qu'il est défini, que des données aient été envoyées ou non... à voir donc)
Petit scarabée deviendra grand

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 août 2006, 16:03

Ah bon? J'ai un doute là, je dirais plutot qu'il vaut mieux utiliser le onsubmit sur le formulaire que le onclick sur le submit, parce qu'en cas de validation par la touche Entrée, le onsubmit sera pris en compte et pas le onclick.
Vi, en effet, mais dans l'exemple il s'agit d'un input de type "button" pour soumettre le formulaire à la place d'un input de type "submit". La touche entrée n'a alors aucun effet sur le formulaire (sauf si le focus est sur le bouton, ce qui déclencherait le onClick de toute façon :))

Il faut juste savoir que la fonction javascript submit() ne déclenche pas l'action onSubmit du formulaire :)
Après, c'est à chacun de voir s'il utilise juste des boutons "submit" ou s'il utilise également du javascript (pour actualiser un formulaire sans perdre de données lors d'un choix dans une combo par exemple)

Eléphant du PHP | 337 Messages

29 août 2006, 05:46

Problème résolu : c'est parce que je m'évertuais à détecter l'envoi du formulaire avec isset($_POST['valid']).

Merci ! : )