Comment ajouter des champs supplémentaires au formulaire avant de le soumettre?


111

Existe-t-il un moyen 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>

Réponses:


161

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;
  });

30
.appendTo(this)serait probablement mieux.
jcuenod

4
@jcuenod original appendTo('#form')est bien meilleur, car une telle approche permet de soumettre un autre formulaire avec les valeurs de celui-ci.
Andremoniy

7
Vous devrez ajouter une logique supplémentaire pour éviter d'accumuler ces entrées à chaque soumission.
amos

Vous voudrez probablement supprimer l'élément d'entrée avant de l'ajouter au cas où il existe déjà$(this).find("input[name="+"something"+"]").remove();
K Vij

42

Essaye ça:

$('#form').submit(function(eventObj) {
    $(this).append('<input type="hidden" name="field_name" value="value" /> ');
    return true;
});

J'ai besoin d'ajouter un champ de fichier de manière dynamique. J'ai essayé d'avoir type = file, et la valeur également en tant que fichier (j'utilise WebKitDirectory, donc j'obtiens en fait les objets fichier), mais il ne semble jamais le passer. Le texte d'entrée est toujours transmis cependant. Sil te plait aide moi!
Swaathi Kakarla

Ma réponse préférée en raison de l'utilisation thisau lieu du redondant#form
rinogo

15
$('#form').append('<input type="text" value="'+yourValue+'" />');

10

Vous pouvez ajouter un hidden inputavec la valeur que vous devez envoyer:

$('#form').submit(function(eventObj) {
    $(this).append('<input type="hidden" name="someName" value="someValue">');
    return true;
});

5

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")
    } 
});

Ouais, mais il n'y a pas de redirection vers la page de résultats.
omikron

3
cela devrait fonctionner: $('body').append(form); $(form).submit();
Jeff Lowery

Cela m'a été le plus utile, car j'ai un grand nombre de champs générés et je ne veux pas créer de champs masqués pour chacun.
Sprachprofi le

Pourquoi pas @Sprachprofi?
Displee

3

Peut être utile pour certains:

(une fonction qui vous permet d'ajouter les données au formulaire en utilisant un objet, avec substitution pour les entrées existantes, s'il y en a) [pure js]

(la forme est un domaine, et non un objet jquery [ jqryobj.get (0) si vous avez besoin ])

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;
}

Utilisation :

addDataToForm(form, {
    'uri': window.location.href,
     'kpi_val': 150,
     //...
});

tu peux aussi l'utiliser comme ça

var form = addDataToForm('myFormId', {
    'uri': window.location.href,
     'kpi_val': 150,
     //...
});

vous pouvez ajouter # si vous le souhaitez aussi ("#myformid").

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.