J'ai exploité document.activeElement
comme indiqué dans cette réponse : Comment obtenir l'élément focalisé avec jQuery ?
$form.on('submit', function() {
var $btn = $(document.activeElement);
if (
/* there is an activeElement at all */
$btn.length &&
/* it's a child of the form */
$form.has($btn) &&
/* it's really a submit element */
$btn.is('button[type="submit"], input[type="submit"], input[type="image"]') &&
/* it has a "name" attribute */
$btn.is('[name]')
) {
console.log("Seems, that this element was clicked:", $btn);
/* access $btn.attr("name") and $btn.val() for data */
}
});
Je tire parti du fait que le bouton est toujours l'élément ciblé après avoir cliqué dessus. Cela permet no travail, si vous faites un blur()
juste 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, le document.activeElement
n'est pas défini. Vous devez faire attention à cela vous-même, en manipulant la fonction keypress
événements en input[type="text"]
et similaires.
Mise à jour 2017-01 : Pour ma bibliothèque Hyperform J'ai choisi de ne pas utiliser activeElement
mais pour attraper tous les événements, qui mènent à la soumission du formulaire. Le code pour cette est sur Github.
Si vous utilisez Hyperform, voici comment accéder au bouton qui déclenche l'envoi :
$(form).on('submit', function(event) {
var button = event.submittedVia;
});
2 votes
Notez qu'il n'existe pas nécessairement de bouton de ce type. Un script pourrait faire
formobj.submit()
. Je pense que les événements à cliquer sont la voie à suivre.1 votes
Pour les navigateurs modernes, il existe maintenant
event.submitter
qui vous donne le<button>
o<input type="submit">
qui a été cliqué.0 votes
event.originalEvent.submitter
1 votes
Notez qu'Apple Safari ne doit pas être considéré comme un navigateur moderne ici non plus !