J'ai un .submit()
événement mis en place pour la soumission du formulaire. J'ai également plusieurs formulaires sur la page, mais un seul ici pour cet exemple. Je voudrais savoir sur quel bouton d'envoi a été cliqué sans appliquer un .click()
événement à chacun.
Voici la configuration:
<html>
<head>
<title>jQuery research: forms</title>
<script type='text/javascript' src='../jquery-1.5.2.min.js'></script>
<script type='text/javascript' language='javascript'>
$(document).ready(function(){
$('form[name="testform"]').submit( function(event){ process_form_submission(event); } );
});
function process_form_submission( event ) {
event.preventDefault();
//var target = $(event.target);
var me = event.currentTarget;
var data = me.data.value;
var which_button = '?'; // <-- this is what I want to know
alert( 'data: ' + data + ', button: ' + which_button );
}
</script>
</head>
<body>
<h2>Here's my form:</h2>
<form action='nothing' method='post' name='testform'>
<input type='hidden' name='data' value='blahdatayadda' />
<input type='submit' name='name1' value='value1' />
<input type='submit' name='name2' value='value2' />
</form>
</body>
</html>
Exemple en direct sur jsfiddle
Outre l'application d'un événement .click () sur chaque bouton, existe-t-il un moyen de déterminer le bouton d'envoi sur lequel vous avez cliqué?
name
?Réponses:
J'ai posé cette même question: comment puis-je obtenir le bouton à l'origine de la soumission à partir de l'événement de soumission du formulaire?
J'ai fini par trouver cette solution et cela a plutôt bien fonctionné:
Dans votre cas avec plusieurs formulaires, vous devrez peut-être modifier un peu cela, mais cela devrait toujours s'appliquer
la source
J'ai trouvé que cela fonctionnait.
la source
Cela fonctionne pour moi:
la source
id
laactiveElement
, je l' ai fait$(document.activeElement).attr('id');
document.activeElement.id
document.activeElement
n'est pas l'entrée. Dans mon cas, c'est un div modal (qui contient le formulaire).Lorsque le formulaire est soumis:
document.activeElement
vous donnera le bouton d'envoi sur lequel vous avez cliqué.document.activeElement.getAttribute('value')
vous donnera la valeur de ce bouton.la source
Voici l'approche qui semble plus propre à mes fins.
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 d'événement) pour être accessible ultérieurement. C'est un trait assez large, car il se déclenchera pour tout clic n'importe où sur le formulaire. Les commentaires sur l'optimisation sont les bienvenus, mais je pense que cela ne causera jamais de problèmes notables.
Ensuite, dans
$('form').submit()
, vous pouvez demander ce qui a été cliqué en dernier, avec quelque chose commela source
return false
, alors que cette méthode fonctionne correctement car le clic est lié au formulaire au lieu de ses enfants.... $(event.target))
mais ne peut pas le modifier car les modifications doivent être> 6 caractèresWow, certaines solutions peuvent se compliquer! Si cela ne vous dérange pas d'utiliser un simple global, profitez simplement du fait que l'événement de clic du bouton d'entrée se déclenche en premier. On pourrait filtrer davantage le sélecteur $ ('input') pour l'une des nombreuses formes en utilisant $ ('# myForm input').
la source
J'ai trouvé que la meilleure solution est
Cela ne fonctionne pas seulement sur les entrées, mais il fonctionne également sur les balises de bouton. Il obtient également l'identifiant du bouton.
la source
$(document.activeElement).attr('id')
retour du gestionnaire de soumissionundefined
Une autre solution possible consiste à ajouter un champ masqué dans votre formulaire:
Ensuite, dans la fonction prête, ajoutez des fonctions pour enregistrer la touche sur laquelle vous avez appuyé:
Maintenant, dans le gestionnaire de soumission de formulaire, lisez la variable masquée et décidez en fonction d'elle:
la source
S'appuyant sur ce que Stan et yann-h ont fait, mais celui-ci est réglé par défaut sur le premier bouton. La beauté de cette approche globale est qu'elle capte à la fois le clic et la touche Entrée (même si le focus n'était pas sur le bouton. Si vous devez autoriser la saisie dans le formulaire, répondez-y simplement lorsqu'un bouton est focalisé ( c'est-à-dire la réponse de Stan). Dans mon cas, je voulais autoriser enter à soumettre le formulaire même si l'utilisateur se concentrait actuellement sur la zone de texte.
J'utilisais également un attribut «nom» plutôt que «id» mais c'est la même approche.
la source
Celui-ci a fonctionné pour moi
la source
Si ce que vous entendez par l'ajout d'un événement .click est que vous ne voulez pas avoir de gestionnaires distincts pour ces événements, vous pouvez gérer tous les clics (soumissions) dans une seule fonction:
la source
event.preventDefault
ou faites quelque chose commeinput.parents("form")[0].submit()
.Comme je ne peux pas commenter la réponse acceptée, j'apporte ici une version modifiée qui devrait prendre en compte les éléments qui sont en dehors du formulaire (ie: attaché au formulaire en utilisant l'
form
attribut). C'est pour un navigateur moderne: http://caniuse.com/#feat=form-attribute . Leclosest('form')
est utilisé comme solution de repli pour unform
attribut non pris en chargela source
"button,[type=submit]"
ajouter un champ caché
la source
button[type=submit]
etinput[type=image]
.Pour moi, la meilleure solution était la suivante:
la source
En travaillant avec cette excellente réponse , vous pouvez vérifier l'élément actif (le bouton), ajouter une entrée masquée au formulaire et éventuellement la supprimer à la fin du gestionnaire de soumission.
Note latérale: J'ajoute personnellement la classe
form-js
sur tous les formulaires qui sont soumis via JavaScript.la source
Similaire à la réponse de Stan mais:
la source
C'est la solution que j'ai utilisée et qui fonctionne très bien:
la source
Ça m'a aidé https://stackoverflow.com/a/17805011/1029257
Formulaire envoyé uniquement après avoir cliqué sur le bouton Soumettre.
la source
Voici ma solution:
la source
J'ai aussi fait une solution, et ça marche plutôt bien:
il utilise jQuery et CSS
Tout d'abord, j'ai créé une classe CSS rapide, qui peut être intégrée ou dans un fichier séparé.
Ensuite, sur l'événement de clic d'un bouton dans le formulaire, ajoutez la classe CSS au bouton. Si le bouton a déjà la classe CSS, supprimez-le. (Nous ne voulons pas de deux classes CSS [juste au cas où]).
Maintenant, testez le bouton pour voir qu'il a la classe CSS, si le bouton testé n'a pas le CSS, alors l'autre bouton le fera.
J'espère que cela t'aides! À votre santé!
la source
button[type=submit]
etinput[type=image]
.hasClass()
etremoveClass()
sont redondantes, caraddClass()
n'ajoutera pas deux fois la même classe.Vous pouvez créer un type d'entrée = "caché" comme support pour les informations d'identification d'un bouton.
Dans ce cas, le formulaire transmet la valeur "1" (id de votre bouton) lors de la soumission. Cela fonctionne si onClick se produit avant de soumettre (?), Ce que je ne sais pas si c'est toujours vrai.
la source
Un moyen simple de distinguer le <bouton> ou le <input type = "button" ...> sur lequel on appuie est de vérifier leur 'id':
la source
Voici un exemple, qui utilise this.form pour obtenir le bon formulaire dans lequel la soumission est, et des champs de données pour stocker le dernier élément cliqué / ciblé. J'ai également enveloppé le code de soumission dans un délai d'expiration pour être sûr que les événements de clic se produisent avant son exécution (certains utilisateurs ont signalé dans les commentaires que sur Chrome, un événement de clic est parfois déclenché après une soumission).
Fonctionne lors de la navigation à la fois avec les touches et avec la souris / les doigts sans compter sur les navigateurs pour envoyer un événement de clic sur la touche RETOUR (cela ne fait pas de mal cependant), j'ai ajouté un gestionnaire d'événements pour les événements de focus pour les boutons et les champs.
Vous pouvez ajouter des boutons de type = "soumettre" aux éléments qui se sauvegardent lorsque vous cliquez dessus.
Dans la démo, j'ai défini une bordure rouge pour afficher l'élément sélectionné et une alerte qui affiche le nom et la valeur / étiquette.
Voici la FIDDLE
Et voici le (même) code:
Javascript:
HTML DUMMY:
DUMB CSS:
la source
J'écris cette fonction qui m'aide
puis utiliser
la source
la source
Vous souhaitez utiliser window.event.srcElement.id comme ceci:
pour un bouton qui ressemble à:
vous obtiendrez une alerte qui se lit comme suit: "l'élément cliqué était myButton.
Dans votre exemple amélioré, vous pouvez ajouter window.event.srcElement à process_form_submission et vous aurez une référence à l'élément appelé par le processus.
la source