11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

J'ai un gros formulaire et je dois désactiver le bouton submit une fois qu'on a cliqué, car le traitement peut être long et il n'est pas désirable que l'utilisateur puisse envoyer deux fois de suite. En soi, ce n'est pas très compliqué, c'est l'affaire d'une seule ligne et 30 secondes d'intense réflexion même pour un novice en javascript. Pour tout dire, c'est un truc vraiment idiot. Inutile de discuter du bien fondé de cette fonctionnalité, je suis obligé.

Cependant j'ai un bug que je n'ai pu résoudre après plusieurs heures de recherche : si après envoi le résultat est une erreur et qu'on clique sur le bouton précédent du navigateur, le bouton reste désactivé sous safari, alors qu'IE8 et firefox 3 n'y voient aucun inconvénient.

Une page de test rapide est disponible ici : Page de test
1. Cliquez sur valider. Que vous ayez rentré un mot de passe ou non n'a aucune importance
2. Le pseudo message d'erreur "l'envoi a planté" s'affiche
3. Cliquez sur précédente
4. Avec IE ou firefox, on peut à nouveau renvoyer le formulaire, tandis qu'avec safari on ne peut plus.

Si vous avez une idée pour résoudre ce problème... merci.
Modifié par QuentinC (18 Nov 2009 - 15:22)
Merci, problème résolu en utilisant onunload. Pour une fois qu'IE a un comportement plus logique que les autres...

a écrit :
(évidemment, ce genre de problèmes se règle sur le serveur, pour des question de sécurité et d'ergonomie)

Mais tu voulais dire quoi par là ? C'est au serveur et à lui seul, et non pas à javascript, de vérifier que le formulaire n'a pas été envoyé en double, et de le rejeter le cas échéant ?
QuentinC a écrit :
Mais tu voulais dire quoi par là ? C'est au serveur et à lui seul, et non pas à javascript, de vérifier que le formulaire n'a pas été envoyé en double, et de le rejeter le cas échéant ?

Oui, désolé, c'était un peu bref. Smiley smile

Oui, c'est ce que je voulais dire. Dans le cas idéal, je pense en effet qu'il est préférable de faire ce genre de tests sur le serveur.