107 votes

jQuery form serialize - chaîne vide

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 déclenche l'événement de clic, formData est vide. J'utilise jQuery 1.4.2.

225voto

Felix Kling Points 247451

Vous devez donner à la input un nom. 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 de caractères de type name1=value1&name2=value2 . Sans nom, il ne peut pas créer une telle chaîne.

Notez que name est 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 doit avoir un nom.

1 votes

Les identifiants sont ils nécessaires pour le form serialize btw ?

0 votes

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

0 votes

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

86voto

Madbreaks Points 8759

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 du formulaire avaient des valeurs mais étaient désactivées, ce qui a entraîné le renvoi d'une chaîne vide.

5 votes

C'est une sale histoire. Je voulais désactiver les champs pendant que j'envoyais le courrier en mode ajax et je l'ai fait. avant sérialiser le formulaire...

1 votes

Oh mon dieu, c'est un problème qui me rendait folle. +1 mec, un moyen de le faire fonctionner sur les éléments désactivés ?

0 votes

@Noitidart Tu pourrais écrire le tien. serialize Extension jQuery qui itère sur les entrées et inclut celles qui sont désactivées. Mais il n'y a aucun moyen de le faire, pour autant que je sache, en utilisant le jQuery prêt à l'emploi.

10voto

Victor Points 3774

Il n'y a pas name dans l'entrée... cela peut être un problème pour serialize.

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

0 votes

Homme. Vous êtes un tel sauveur de vie ! !! Merci.

7voto

VahidN Points 3905

Vérifiez également qu'il n'y a pas 2 éléments avec le même id sur la page.

3 votes

Il s'agit d'un commentaire et non d'une réponse à la question. Veuillez utiliser les commentaires à l'avenir. Merci :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X