jQuery form serialize - stringa vuota


95

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

Quando avvio l'evento click, formData è vuoto. Sto usando jQuery 1.4.2.

Risposte:


214

Devi dare inputun nome all'elemento. Per esempio:

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

ti darà nella casella di avviso foo=2.

.serialize()prende il nome e il valore dei campi del modulo e crea una stringa come name1=value1&name2=value2. Senza un nome non può creare una stringa del genere.

Nota che nameè qualcosa di diverso da id. Anche il tuo modulo non avrebbe funzionato se lo avessi usato in modo "normale". Ogni campo del modulo ha bisogno di un nome.


1
gli ID sono necessari per serializzare il modulo btw?
Vic

Vorrei suggerire di includere anche la risposta di Madbreaks qui.
Slavo

Ho un nome ma ho ancora la stringa vuota quando serializzo la mia vista è una raccolta, quindi i nomi sono ad esempio [0] .Unit, [0] .Currency
Marc Roussel

La risposta qui sotto mi ha aiutato ... assicurati che i tuoi input non siano DISABILITATI!
soundstripe

83

Sebbene non si applichi a questo particolare esempio, lo stesso comportamento si verifica se uno o più input del modulo lo sono disabled. Questi input non verranno visualizzati nella stringa serializzata. Nel mio caso, tutti gli input del modulo avevano valori ma erano disabilitati, risultando in una stringa vuota restituita.


4
Quello è brutto. Volevo disabilitare i campi mentre invio la mail in stile ajax e l'ho fatto prima di serializzare il modulo ...
Daniel Lang

1
Oh mio Dio, questo era un problema che mi stava facendo impazzire. +1 uomo, qualche modo per farlo funzionare su elementi disabili?
Noitidart

@Noitidart Potresti scrivere la tua serializeestensione jQuery che itera sugli input e include quelli disabilitati. Ma non c'è modo di farlo, per quanto ne so, usando jQuery out-of-the-box.
Madbreaks

Ha senso non includere elementi disabilitati, poiché gli elementi disabilitati non dovrebbero contenere l'input dell'utente.
Jenny O'Reilly

2
@ JennyO'Reilly Certo, ma non contenere l'input dell'utente non significa "non ha un valore".
Madbreaks

10

Non c'è alcun nameattributo nell'input ... che potrebbe essere un problema per la serializzazione.

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

Uomo. Sei un tale salvatore della vita !! Grazie.
Anjana Silva

6

Assicurati inoltre che non ci siano 2 elementi con lo stesso ID nella pagina.


3
Questo è un commento, non una risposta alla domanda. Si prega di utilizzare i commenti in futuro. Grazie :)
Gone Coding
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.