Est-il possible d'utiliser JavaScript et JQuery pour ajouter des champs supplémentaires à envoyer à partir d'un formulaire HTTP à l'aide de POST?
Je veux dire:
<form action="somewhere" method="POST" id="form">
<input type="submit" name="submit" value="Send" />
</form>
<script type="text/javascript">
$("#form").submit( function(eventObj) {
// I want to add a field "field" with value "value" here
// to the POST data
return true;
});
</script>
Oui. Vous pouvez essayer avec des paramètres cachés.
$("#form").submit( function(eventObj) {
$('<input />').attr('type', 'hidden')
.attr('name', "something")
.attr('value', "something")
.appendTo('#form');
return true;
});
Essaye ça:
$('#form').submit(function(eventObj) {
$(this).append('<input type="hidden" name="field_name" value="value" /> ');
return true;
});
Vous pouvez ajouter une hidden
input
avec la valeur que vous souhaitez envoyer:
$('#form').submit(function(eventObj) {
$(this).append('<input type="hidden" name="someName" value="someValue">');
return true;
});
$('#form').append('<input type="text" value="'+yourValue+'" />');
Cela marche:
var form = $(this).closest('form');
form = form.serializeArray();
form = form.concat([
{name: "customer_id", value: window.username},
{name: "post_action", value: "Update Information"}
]);
$.post('/change-user-details', form, function(d) {
if (d.error) {
alert("There was a problem updating your user details")
}
});
Peut être utile pour certains:
(une fonction qui vous permet d'ajouter les données au formulaire à l'aide d'un objet, avec remplacement pour les entrées existantes, le cas échéant) [pure js]
(form est un dom el et non un objet jQuery [ jqryobj.get (0) si vous avez besoin de ])
function addDataToForm(form, data) {
if(typeof form === 'string') {
if(form[0] === '#') form = form.slice(1);
form = document.getElementById(form);
}
var keys = Object.keys(data);
var name;
var value;
var input;
for (var i = 0; i < keys.length; i++) {
name = keys[i];
// removing the inputs with the name if already exists [overide]
console.log(form);
Array.prototype.forEach.call(form.elements, function (inpt) {
if(inpt.name === name) {
inpt.parentNode.removeChild(inpt);
}
});
value = data[name];
input = document.createElement('input');
input.setAttribute('name', name);
input.setAttribute('value', value);
input.setAttribute('type', 'hidden');
form.appendChild(input);
}
return form;
}
addDataToForm(form, {
'uri': window.location.href,
'kpi_val': 150,
//...
});
vous pouvez l'utiliser comme ça aussi
var form = addDataToForm('myFormId', {
'uri': window.location.href,
'kpi_val': 150,
//...
});
vous pouvez aussi ajouter # si vous le souhaitez ("#myformid").