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.

user137348
la source

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.

Félix Kling
la source
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.

Madbreaks
la source
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" />
Victor
la source
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.

VahidN
la source
3
Ceci est un commentaire, pas une réponse à la question. Veuillez utiliser les commentaires à l'avenir. Merci :)
Fini le codage le