2010-04-07 5 views
75

Mon html:forme jQuery serialize - chaîne vide

<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" /> 

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

Répondre

173

Vous devez donner un nom à l'élément input. .: 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 zone d'alerte foo=2.

.serialize() prend le nom et la valeur des champs de 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 name est quelque chose de différent de id. Votre formulaire n'aurait également pas fonctionné si vous l'avez utilisé de manière "normale". Chaque champ de formulaire a besoin d'un nom.

+1

sont ids nécessaires pour former sérialiser btw? – Vic

+4

Non, ils ne le sont pas. –

+2

Je ne l'ai jamais deviné, ça marche très bien pour moi –

7

Il n'y a pas d'attribut name dans l'entrée ... qui peut poser un problème pour sérialiser.

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

Bien que cela ne s'applique pas à cet exemple particulier, le même comportement se produit si une ou plusieurs entrées de formulaire est désactivée. 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, entraînant le retour d'une chaîne vide.

+0

Super, ça l'a fait pour moi! J'aimerais que les docteurs mentionnent ce fait important. –

+3

merci, le problème me traîne pendant deux heures –

+3

C'est un méchant. Je voulais désactiver les champs pendant que j'envoyais le courrier ajax-style et je l'ai fait _before_ sérialiser le formulaire ... –

4

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

+2

Ceci est un commentaire, pas une réponse à la question. S'il vous plaît utiliser les commentaires à l'avenir. Merci :) –