jQuery: Trouvez l'élément cliqué lors de la liaison à un événement de soumission de formulaire?
Je pense que cela devrait être simple. Dire que j'ai la suite de jQuery:
$someForm.live('submit', function(event) {
//do something
});
Si il n'y a plus d'un bouton de soumission (<button type="submit">
) sous cette forme, et je veux me référer à la name
attribut du bouton qui a été cliqué, comment pourrais-je le faire au sein de la fonction de rappel?
Mise À Jour - La Clarification
Dans le rappel du contexte, à la fois this
et event.target
reportez-vous à la forme elle-même, et event
est profondément imbriquée à l'objet. Il peut contenir ce que je cherche, mais je n'ai pas encore trouvé.
Une autre façon de formuler cette question, "si je suis à regarder pour un événement submit d'un formulaire (et pas de ses éléments enfant), est-il possible, quand j'ai la poignée de l'événement, afin de déterminer l'élément enfant à partir de laquelle l'événement bouillonnait à l'écran?" Est l'élément cliqué encore disponibles à ce point, ou ne le navigateur, il suffit de considérer un événement sur le formulaire lui-même qui n'avait pas de plus profond origine?
Mise À Jour 2 - Réponse
Il semble que la réponse est ce que Nick Craver dit - l'événement submit a son origine dans le formulaire lui-même, donc il ne peut pas être retracée à la touche, ce qui a eu un événement de clic, pas un événement submit. Pour obtenir tout complément d'information du clic, il est nécessaire de disposer d'un écouteur de clics de bouton.
Dans certains cas (comme le mien), vous pouvez avoir besoin à la fois 1) de capture soumettre le bouton est cliqué, et 2) de se lier à l'événement submit du formulaire. Par exemple, si vous utilisez jQuery validation, il empêche le formulaire de soumission jusqu'à ce que celui-ci est valide. Si vous faites le formulaire de soumission via ajax par la liaison au clic de bouton, vous pourrez éviter que la validation.
Comme Nick l'a montré, vous pouvez résoudre ce problème en capturant le bouton info à l'aide d'un écouteur de clics sur les boutons, et ensuite utiliser cette information dans le formulaire de soumission de rappel.
Propre façon de passer le bouton info de la cliquez sur retour vers le formulaire de soumission de rappel est d'utiliser jQuery.data()
pour stocker le sur le formulaire. Par exemple:
//In the button's click event callback...
jQuery.data($someForm, 'lastSubmitButton', event.target.name);
//In the form's submit event callback...
var whichButton = jQuery.data($someForm, 'lastSubmitButton');
Cela évite la nécessité d'une variable globale.
source d'informationauteur Nathan Long
Vous devez vous connecter pour publier un commentaire.
Normalement vous pouvez utiliser
événement.cible
pour l'élément lui-même...et dans ce cas, puisque c'est un natif de propriété DOM, il suffit d'utiliser.name
ainsi:Cependant, depuis
submit
ne vient pas de la touche, en un seul clic, vous voulez quelque chose de plus comme cela:Utilisation
this
ici, parce que comme @patrick points, un<button>
peut avoir des enfants, et la cible peut être un enfant dans ces cas.Vous pouvez utiliser le cible propriété de la
event
objet pour obtenir l'élément qui a initié l'événement:EDIT: Noter que, pour que cela fonctionne, vous devrez gérer la
click
événements de vos boutons de soumission à la place de lasubmit
événement de votre formulaire.