J'ai un formulaire dans lequel le bouton Soumettre ne se trouve pas entre les balises <form>
. Le bouton d'envoi a un gestionnaire click
pour soumettre le formulaire via l'événement submit()
de jQuery. Cela fonctionne parfaitement.
Cependant, j'ai besoin que la valeur du bouton Soumettre soit postée. Comme le bouton n'existe pas dans les balises <form>
, il n'est pas inclus dans le tableau POST. Par conséquent, je dois trouver un moyen de passer une variable supplémentaire lors de la soumission du formulaire.
Certaines stipulations sur ce qui ne peut arriver pour y parvenir incluent:
<form>
.ajax
, post
ou get
.input
cachés ni de boutons de soumission masqués par CSS.J'ai envisagé quelque chose comme, mais évidemment cela ne fonctionne pas.
$('#admin_form').submit({'variable_name', 'true'});
Quelqu'un a une idée sur la façon dont je pourrais y arriver?
Une chose à faire est d'utiliser l'attribut onsubmit
pour que javascript injecte un champ de publication dans le formulaire avec la valeur du bouton de soumission à droite lors de sa soumission. Vous devez le faire avec un champ de saisie masqué, mais vous n'ajoutez le champ de saisie que lorsque l'utilisateur a cliqué sur le bouton d'envoi. Le champ de saisie n'y serait donc pas présent depuis le début (j'espère que cela répond à vos besoins. ). Donc, quelque chose comme:
function submitHandler()
{
submitVal = $('#submitButton').val();
$('#myForm').append("<input type='hidden' name='submitValue' value='"+
submitVal+"' />");
return true;
}
Ce qui resterait dans la valeur supplémentaire au moment où le bouton a été cliqué.
Cela semble être une vieille question, mais comme je venais juste de rencontrer un problème similaire et de trouver une bonne solution (pour moi), je pensais la poster:
$('#admin_form').trigger('submit', [ { 'variable_name': true } ]);
ou
$('#admin_form').trigger('submit', [ 'variable_name', 'true' ]);
selon que vous voulez ou non transmettre une variable appelée variable_name
avec la valeur true
ou 2 variables distinctes.
Et juste pour être clair, cela ne va bien sûr pas soumettre automatiquement variable_name
avec le reste des champs du formulaire, mais si vous avez un gestionnaire de soumission, comme je le fais dans jQuery, les variables seront transmises en tant qu'arguments, après l'événement.
La réponse de Jesse est le seul moyen d'accomplir cela via POST. Vous pouvez également ajouter la variable à la valeur d'action du formulaire, mais ce serait en transmettant ce paramètre via GET au lieu de POST. Sans entrée masquée ajoutée au formulaire avant d'autoriser l'action "Envoyer" du navigateur par défaut, il est impossible d'accéder aux données de publication brutes de la demande HTTP avant qu'elles soient envoyées. C'est un problème avant le dilemme Egg. l’intention de le faire est de modifier les données/en-têtes HTTP POST qui sont envoyés à la page suivante, mais le seul moyen de conserver les données avant que le navigateur ne les publie sur la page suivante élément de formulaire.
Une autre solution consiste à utiliser la fonction $ .post () pour envoyer les données de votre choix par la poste pendant le gestionnaire onsubmit, puis dans le gestionnaire de réussite rediriger vers la page souhaitée. Je sais que cela ne va pas selon les règles ci-dessus, mais est une autre solution possible à un problème néanmoins.
Si vous voulez devenir vraiment fou et suivre toutes vos règles, vous pouvez également:
Si vous voulez le faire directement à partir d'un élément qui a été modifié sans écrire de gestionnaire d'envoi, ceci fonctionne:
<script>
$(function() {
$( ".datePicker" ).datepicker({
dateFormat: 'dd-M-yy',
onSelect: function (date) {
$('#dateChanger').append("<input type='hidden' name='changed_" + $(this).attr("name") + "' value='" + $(this).attr("value") + "' />");
$("#dateChanger").submit();
}
});
});
</script>
Sur jquery 1.11.1
J'ai réussi comme ça:
$(yourForm).on('submit',{'yourExtraData':extraData},function(event){
alert('your extra data ' + event.data['yourExtraData'] + ' went thru');
});
Vérifiez également: https://api.jquery.com/event.data/