J'essaie de trouver la valeur du bouton d'envoi qui a déclenché l'envoi du formulaire
$("form").submit(function() {
});
Je pourrais éventuellement déclencher un événement $ ("input [type = submit]"). Click () pour chaque bouton et définir une variable, mais cela semble moins élégant que de retirer le bouton du formulaire lors de l'envoi.
formobj.submit()
. Je pense que les événements de clic sont la voie à suivre.event.submitter
qui vous donne le<button>
ou sur lequel vous avez<input type="submit">
cliqué.Réponses:
J'ai exploité
document.activeElement
comme esquissé dans cette réponse: Comment obtenir l'élément ciblé avec jQuery?Je profite du fait que le bouton est toujours l'élément ciblé après avoir cliqué dessus. Cela ne fonctionnera pas si vous faites un
blur()
droit après le clic.@Doin a repéré un autre inconvénient. Si un utilisateur soumet le formulaire via
enter
dans un champ de texte, ledocument.activeElement
n'est pas défini. Vous auriez besoin de faire attention à cela vous-même, en gérant leskeypress
événements dansinput[type="text"]
et similaires.Mise à jour 2017-01: Pour ma bibliothèque Hyperform, j'ai choisi de ne pas utiliser
activeElement
mais de capturer tous les événements qui mènent à la soumission de formulaires. Le code pour cela est sur Github.Si vous utilisez Hyperform, voici comment accéder au bouton qui a déclenché la soumission:
la source
activeElement
, car le "soumissionnaire" peut être défini: A. Via l' activation de clic authentique (cliqué directement avec la souris ou le clavier Espace / Entrée); B. Par activation de clic synthétique (buttonElement.click()
oubuttonElement.dispatch(new MouseEvent(...))
, sans gaing le focus); C. via la soumission implicite du formulaire (interaction du clavier avec le champ d'un autre formulaire)formElement.submit()
J'ai implémenté cela et je suppose que cela fera l'affaire.
et c'est l'événement du bouton d'envoi qui le configure
Merci pour les réponses, mais ce n'est pas terriblement inélégant ...
la source
doNotSubmit
classe, à l'intérieur de la fonction de soumission, vérifiez si la classe n'existe pas (sinon, ne soumettez pas), à l'intérieur de l'événement click, supprimez la classe de formulairedoNotSubmit
et effectuez un déclencheur $ (''. MyForm '). ('soumettre'); après avoir ajouté la valeur du bouton d'J'ai créé un formulaire de test et en utilisant Firebug j'ai trouvé cette façon d'obtenir la valeur;
Malheureusement, seul Firefox prend en charge cet événement.
la source
Il existe désormais une
submitter
propriété standard dans l'événement de soumission.Déjà implémenté dans Firefox 75 !
Pour les navigateurs ne le prenant pas en charge, utilisez ce polyfill :
la source
Voici une approche qui me semble plus propre.
Tout d'abord, pour toutes les formes:
Lorsque cet événement de clic est déclenché pour un formulaire, il enregistre simplement la cible d'origine (disponible dans l'objet événement) pour y accéder ultérieurement. Il s'agit d'un trait assez large, car il se déclenchera pour tout clic n'importe où sur le formulaire. Les commentaires d'optimisation sont les bienvenus, mais je soupçonne que cela ne causera jamais de problèmes notables.
Ensuite, dans $ ('form'). Submit (), vous pouvez demander ce qui a été cliqué pour la dernière fois, avec quelque chose comme
la source
Selon ce lien , l'objet Event contient un champ
Event.target
, qui:Renvoie une chaîne représentant l'objet qui a déclenché l'événement.
Je viens de créer une page testant quelle est cette valeur, et il semble que cette représentation concerne le formulaire lui-même, pas le bouton sur lequel vous avez cliqué. En d'autres termes, Javascript ne fournit pas la possibilité de déterminer le bouton cliqué.
En ce qui concerne la solution de Dave Anderson , il peut être judicieux de la tester dans plusieurs navigateurs avant de l'utiliser. Il est possible que cela fonctionne bien, mais je ne peux pas dire de toute façon.
la source
target
renvoie la forme entière. Donc malheureusement pas utile pour détecter le bon bouton de soumission.Event.target
n'est pas une chaîne. C'est unEventTarget
objet, qui dans ce cas est le formulaire soumis lui-même.Une approche propre consiste à utiliser l'événement click sur chaque bouton de formulaire. Voici un formulaire html avec des boutons d'enregistrement, d'annulation et de suppression:
Voici le jquery. J'envoie l '«action» appropriée à la même fonction de serveur en fonction du bouton sur lequel on a cliqué («enregistrer» ou «supprimer»). Si vous cliquez sur «Annuler», je recharge simplement la page.
la source
J'ai cherché et trouvé plusieurs façons d'obtenir le bouton d' envoi
name
+value
envoyé au serveur en utilisant jQuery + AJAX. Je ne les aimais pas beaucoup ...L'un des meilleurs était la solution du chasseur présentée ici!
Mais j'en ai écrit un autre moi-même.
Je veux partager, car c'est bon, et, comme j'avais besoin, cela fonctionne aussi avec les formulaires chargés via ajax (après document.ready):
Facile! Lorsque le bouton d'envoi est cliqué, un champ masqué est ajouté au formulaire, en utilisant le même
name
etvalue
du bouton d'envoi.EDIT: La version ci-dessous est plus facile à lire. De plus, il s'occupe de supprimer les champs cachés précédemment ajoutés (dans le cas de soumettre deux fois le même formulaire, ce qui est parfaitement possible en utilisant AJAX).
Code amélioré:
la source
<button/>
partage de tous le mêmename
attribut. J'utiliserais une classe et j'y ferais référence dans votre.remove()
.name
attribut. Si le formulaire est réutilisé et contient des entrées d'envoi avec des noms différents, les anciennes entrées peuvent encombrer le formulaire.<button/>
élément, alors qu'il<input type="submit" />
est utilisé dans le code ...)J'ai essayé certains des exemples fournis, mais ils n'ont pas fonctionné pour nos besoins.
Voici un violon à montrer: http://jsfiddle.net/7a8qhofo/1/
J'ai été confronté à un problème similaire, et c'est ainsi que nous avons résolu le problème dans nos formulaires.
la source
( un événement )
la source
vous pouvez essayer de cette façon avec "event.originalEvent.x" et "event.originalEvent.y":
la source
jQuery ne semble pas fournir ces données sur l'événement de soumission. Il semble que la méthode que vous avez proposée soit votre meilleur pari.
la source
Juste une autre solution car aucune autre ne répondait à mes exigences. L'avantage est que les clics et les touches (entrée et espace) sont détectés.
Cela a fonctionné le mieux pour moi.
la source
Avec un gestionnaire d'événements plus spécifiques et JQuery, votre objet événement est le bouton sur lequel vous avez cliqué. Vous pouvez également obtenir le formulaire de délégation de cet événement si nécessaire.
Ce Doc a tout ce dont vous avez besoin pour commencer. JQuery Doc .
la source
J'écris cette fonction qui m'aide
puis utiliser
la source
Il existe une propriété de soumissionnaire pour SubmitEvent du formulaire . Cependant, à l'heure actuelle, cela ne fonctionne pas sur Safari.
Une approche différente qui fonctionne sur tous les navigateurs. Cependant, vous devez vous fier à l'
form
élément plutôt qu'à l'event
objet. Cela ajoute essentiellement une propriété «soumissionnaire» à l'objet d'élément de formulaire qui peut être référencé plus tard lors de l'envoi du formulaire.la source