J'ai un formulaire contenant un bouton d'envoi quelque part.
Cependant, je voudrais en quelque sorte «attraper» l'événement de soumission et l'empêcher de se produire.
Existe-t-il un moyen de le faire?
Je ne peux pas modifier le bouton d'envoi, car il fait partie d'un contrôle personnalisé.
javascript
html
forms
Nathan Osman
la source
la source
Réponses:
Contrairement aux autres réponses, le retour
false
n'est qu'une partie de la réponse. Considérez le scénario dans lequel une erreur JS se produit avant l'instruction de retour ...html
scénario
le retour
false
ici ne sera pas exécuté et le formulaire sera envoyé de toute façon. Vous devez également appelerpreventDefault
pour empêcher l'action de formulaire par défaut pour les soumissions de formulaire Ajax.Dans ce cas, même avec le bogue, le formulaire ne sera pas envoyé!
Alternativement, un
try...catch
bloc pourrait être utilisé.la source
false
directement deonsumbit
?(<form onsubmit="return mySubmitFunction(evt)">)
Sinon, cela donne une erreur non définie.Vous pouvez utiliser un événement en ligne
onsubmit
comme celui-ciOu
Démo
Maintenant, ce n'est peut-être pas une bonne idée lors de la réalisation de grands projets. Vous devrez peut-être utiliser des écouteurs d'événements.
Veuillez en savoir plus sur les événements en ligne vs les écouteurs d'événements (addEventListener et attachEvent d'IE) ici . Car je ne peux pas l'expliquer plus que Chris Baker .
la source
<form onsubmit="return false;" >
ne fonctionne pas pour moi.Attachez un écouteur d'événements au formulaire à l'aide de
.addEventListener()
, puis appelez la.preventDefault()
méthode surevent
:Je pense que c'est une meilleure solution que de définir un
submit
gestionnaire d'événements en ligne avec l'onsubmit
attribut car il sépare la logique et la structure de la page Web. Il est beaucoup plus facile de gérer un projet où la logique est séparée du HTML. Voir: JavaScript discret .L'utilisation de la
.onsubmit
propriété de l'form
objet DOM n'est pas une bonne idée car elle vous empêche d'attacher plusieurs rappels de soumission à un élément. Voir addEventListener vs onclick .la source
$("button").click(function(e) { e.preventDefault() });
Essaye celui-là...
Code HTML
Code jQuery
ou
la source
stopPropagation
était la seule chose qui a fonctionné dans mon cas. Merci! :)Les travaux suivants à partir de maintenant (testés dans Chrome et Firefox):
où validateMyForm () est une fonction qui retourne
false
si la validation échoue. Le point clé est d'utiliser le nomevent
. Nous ne pouvons pas utiliser par exemplee.preventDefault()
la source
la source
.onsubmit
est une mauvaise idée car elle vous empêche d'attacher plusieurssubmit
rappels à un élément. Je recommande d'utiliser.addEventListener()
.Pour suivre les conventions de programmation JavaScript discrètes et en fonction de la vitesse de chargement du DOM , il peut être judicieux d'utiliser les éléments suivants:
Câblez ensuite les événements en utilisant onload ou DOM ready si vous utilisez une bibliothèque.
De plus, j'utiliserais toujours l'
action
attribut car certaines personnes peuvent avoir un plugin comme NoScript en cours d'exécution qui casserait alors la validation. Si vous utilisez l'attribut action, au moins votre utilisateur sera redirigé par le serveur en fonction de la validation du backend. Si vous utilisez quelque chose commewindow.location
, d'autre part, les choses vont mal.la source
Pour empêcher l'envoi du formulaire, il vous suffit de le faire.
En utilisant le code ci-dessus, cela empêchera la soumission de votre formulaire.
la source
Voici ma réponse:
Ajouter
event.preventDefault();
suronsubmit
et il fonctionne.la source
Vous pouvez ajouter eventListner au formulaire
preventDefault()
et convertir les données du formulaire en JSON comme ci-dessous:la source