jQuery form serialize - chaîne vide


95

Mon html:

 <script type="text/javascript">

    $(function() {

        $("#bt1").click(function() {

            var f = $("#form1");
            var formData = f.serialize();

            alert(formData);
        });

    }); 
</script> 

 <div id="div1">
      <form id="form1" action="/Home/Test1" method="post" name="down">
        <div id="div2">
            <input id="input1" type="text" value="2" />
        </div>    
      </form>
  </div>

 <input type="submit" id="bt1" />

Lorsque je lance l'événement click, formData est vide. J'utilise jQuery 1.4.2.

Réponses:


214

Vous devez donner inputun nom à l' élément. Par exemple:

<form id="form1" action="/Home/Test1" method="post" name="down">
    <div id="div2">
        <input id="input1" type="text" value="2" name="foo"/>
    </div>    
</form>

vous donnera dans la boîte d'alerte foo=2.

.serialize()prend le nom et la valeur des champs du formulaire et crée une chaîne comme name1=value1&name2=value2. Sans nom, il ne peut pas créer une telle chaîne.

Notez que namec'est quelque chose de différent de id. Votre formulaire n'aurait pas non plus fonctionné si vous l'aviez utilisé de manière «normale». Chaque champ de formulaire a besoin d'un nom.


1
les identifiants sont-ils nécessaires pour sérialiser le formulaire btw?
Vic

Permettez-moi de suggérer d'inclure la réponse de Madbreaks ici aussi.
Slavic

J'ai un nom mais j'ai toujours la chaîne vide lors de la sérialisation de ma vue est une collection donc les noms sont par exemple [0] .Unit, [0] .Currency
Marc Roussel

La réponse ci-dessous m'a aidé ... assurez-vous que vos entrées ne sont pas désactivées!
bande sonore du

83

Bien que cela ne s'applique pas à cet exemple particulier, le même comportement se produit si une ou plusieurs entrées de formulaire sont disabled. Ces entrées n'apparaîtront pas dans la chaîne sérialisée. Dans mon cas, toutes les entrées de formulaire avaient des valeurs mais étaient désactivées, ce qui entraînait le retour d'une chaîne vide.


4
C'est méchant. Je voulais désactiver les champs pendant que j'envoie le courrier de style ajax et je l'ai fait avant de sérialiser le formulaire ...
Daniel Lang

1
Oh mon Dieu, c'était un problème qui me rendait fou. +1 homme, comment faire fonctionner les éléments désactivés?
Noitidart

@Noitidart Vous pouvez écrire votre propre serializeextension jQuery qui itère sur les entrées et inclut celles désactivées. Mais il n'y a aucun moyen de le faire, pour autant que je sache, en utilisant jQuery prêt à l'emploi.
Madbreaks

Il est logique de ne pas inclure d'éléments désactivés, car les éléments désactivés ne doivent pas contenir d'entrée utilisateur.
Jenny O'Reilly

2
@ JennyO'Reilly Bien sûr, mais ne contenant pas d'entrée utilisateur ne signifie pas "n'a pas de valeur".
Madbreaks

10

Il n'y a pas d' nameattribut dans l'entrée ... qui peut être un problème pour la sérialisation.

<input id="input1" type="text" value="2" name="input1" />

Homme. Vous êtes un tel sauveur de vie !! Je vous remercie.
Anjana Silva

6

Assurez-vous également qu'il n'y a pas 2 éléments avec le même identifiant sur la page.


3
Ceci est un commentaire, pas une réponse à la question. Veuillez utiliser les commentaires à l'avenir. Merci :)
Fini le codage le
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.