Devrait jQuery $(document).submit(); ne pas déclencher onSubmit dans la balise form?
J'ai le texte suivant:
<script type="text/javascript">
function CancelFormButton(button) {
$(button.form).submit();
}
</script>
<form onsubmit="alert('here');">
<input type="button" value="Cancel" onClick="CancelFormButton(this);" />
</form>
Lorsque je clique sur le bouton "Annuler", le onsubmit du formulaire balise n'est pas déclenché.
Cette ligne au lieu soumet le formulaire avec succès: $(button.form).submit();
mais ignore la alert('here');
dans le onsubmit dans la balise form.
Est-ce correct ou suis-je en train de faire quelque chose de mal?
Par la façon dont, dans ce cas, je veux que cette fonctionnalité, mais je me demande si je vais avoir un problème dans un navigateur où le onsubmit est déclenchée.
Vous devez vous connecter pour publier un commentaire.
Désolé, mal compris votre question.
Selon Javascript - capture onsubmit lors de l'appel de la forme.submit():
(italiques ajoutés).
Remarque: "est activé par un utilisateur" comprend également frapper les boutons de soumission (incluant probablement par défaut de soumettre le comportement de la touche entrée, mais je n'ai pas essayé). Ni, je crois, qu'il ne se déclencher si vous (avec code) cliquez sur un bouton de soumission.
Ce contourner résoudre le problème constaté par @Cletus.
Fonctionne sur tous les navigateurs modernes.
Fonctionnent sur onglets/donné naissance à l'enfant de windows (et oui, même dans IE<9).
Et en la vanille!
Juste passer un DOM référence à un élément de formulaire, et il va assurez-vous que tous les auditeurs, le onsubmit, et (si sa ne l'empêche pas d'ici là) enfin, de soumettre le formulaire.
form
est dans un autredocument
,appendTo()
permet de cloner l'élément pour vous (j'ai utiliséopen()
pour faire un popup et essayéappendTo()
; ne fonctionne pas). Que du jQueryclick()
invoquera soumettre (je l'ai testé sur unanchor
et la page n'a pas changé). Cependant, même si vous êtes de droite, vous pouvez faire beaucoup plus succincte que vous l'avez fait, sinon vous pourriez tout aussi bien continuer à utiliser mon code.function submitForm(form) { $('<input>', {type:'submit', style:'display:none'}).appendTo(form).click().remove(); }
click()
, au moins pour moi, ne semble pas appeler de l'élément sur. Il semble que du feu jointe, cliquez sur événements. Donc<a>
s de ne pas déménager,<input type="submit">
s l'habitude de présenter, et cetera. Et l'autre point est que le jQuery, le code que nous avons écrit de travail pour toutes les formes, mais celles qui existent dans les documents à côté de l'exécution. Id est, dans des cadres, et fenêtres enfants. Pour jQuery, vous aurez besoin deadopt
d'abord dans ces cas. La magie dans mon script original estform.ownerDocument
, création de l'élément dans l'environnement natif de l'obtenir-allerMa solution simple:
C'est un travail pour moi.
Je suppose que c'est raisonnable pour que ce comportement dans certains cas, mais je dirais que le code ne le déclenchement de la soumission d'un formulaire doit toujours être le comportement par défaut. Supposons que vous voulez attraper un formulaire de soumission avec
et ensuite la validation de l'entrée. Si le code pourrait déclencher soumettre des gestionnaires, vous pourriez ne jamais inclure
à l'intérieur de ce gestionnaire, car il en résulterait une boucle infinie (le MÊME gestionnaire d'être appelé, de prévenir la soumission, de valider, et de soumettre à nouveau). Vous devez être en mesure de soumettre manuellement un formulaire à l'intérieur d'un gestionnaire de soumission sans déclencher le même gestionnaire.
Je me rends compte ce n'est pas RÉPONDRE directement à la question, mais il ya beaucoup d'autres réponses sur cette page à propos de la façon dont cette fonctionnalité peut être piraté, et j'ai senti que ce qui doit être souligné (et c'est trop long pour un commentaire).
trigger('submit') ne fonctionne pas.car onSubmit méthode de ne pas me faire virer.
le code suivant fonctionne pour moi, l'appel de méthode onSubmit lors de l'utilisation de ce code :
$("form").find(':submit').click();
Essayer de déclencher() votre fonction:
Au lieu de
$("form").submit()
essayer cette
J'ai trouvé cette question serval ans.
récemment, j'ai essayé de "réécrire" la méthode d'envoi. ci-dessous mon code
}
Il l'a fait dans IE,mais pas dans les autres navigateurs, pour la même raison que "cletus"
La solution la plus simple pour contourner ce problème est de créer des "temporaire" input de type submit et déclencher cliquez sur: