2010-11-21 11 views
13

Ho questo HTML:Come accedere ai valori creati da serializeArray in JQuery?

<form id='myform'> 
<input name='title' value='foo'/> 
</form> 

E creo una matrice di oggetti da essa come questo:

var dataArray = $("#myform").serializeArray(); 

Ora come faccio ad accedere alla 'title' in dataArray? Questo non funziona:

alert(dataArray['title']); 
alert(dataArray['title'].val()); 

risposta

14

Simile a quello che Nick ha scritto, ma un po 'più pulito

var dataArray = $("#myform").serializeArray(), 
    dataObj = {}; 

$(dataArray).each(function(i, field){ 
    dataObj[field.name] = field.value; 
}); 

quindi accedere allo stesso modo

alert(dataObj['title']); 
11
alert(dataArray[0].name); 
alert(dataArray[0].value); 

Quindi:

for (i=0; i<dataArray.length; i += 1) { 
    if (dataArray[i].name === "title") { 
     // do something here... 
    } 
} 
+0

Grazie, ma cosa succede se ho più campi di input e non voglio fare affidamento sull'ordine? – bart

+2

Non stai facendo affidamento sul fatto che il nome è l'id e il valore è il valore, non sono in un oggetto come te lo aspettavi, dovrai scorrere l'array e elaborare le cose mentre le incontri . – Tom

2

Run console.log(dataArray);, quindi aprire la finestra di ispezione Proprietà, e controllare la console. In Chrome, fai clic con il pulsante destro del mouse e seleziona "Ispeziona elemento", quindi fai clic sull'icona "> =" in basso a sinistra, è la seconda da sinistra.

In Firefox si sarebbe installato Firebug e c'è una scheda denominata "Console"

Non sono sicuro se è disponibile in IE, probabilmente qualcosa negli strumenti di sviluppo (premere F12), ma io non lo consiglio in via di sviluppo in IE.

In ogni caso questo elencherà l'oggetto in un modo che consente di navigare e visualizzare i valori di ciascun elemento. In questo modo è possibile utilizzare questo per decifrare come accedere ai valori :)

Buona fortuna

23

È possibile scorrere, as @Tom has ... o se si sta accedendo più di uno, essere un po 'più efficiente e loop di una volta, la creazione di un oggetto come questo:

var dataArray = $("#myform").serializeArray(), 
    len = dataArray.length, 
    dataObj = {}; 

for (i=0; i<len; i++) { 
    dataObj[dataArray[i].name] = dataArray[i].value; 
} 

Quindi è possibile accedervi come vuoi tu, per esempio:

alert(dataObj['title']); //or alert(dataObj.title); 

You can test it out here .

+1

Molto bello !!! Questo funziona molto bene spingendolo a un elaboratore di moduli php! –

1

accodamento/eco/stampa dataArray[0].name ad un div vi darà 'titolo'

1

Avviso di serializeArray degli input in myDiv (nota: il selettore :input includerà anche i tag select e textarea!):

//alert(fData.length) // how many inputs got picked up 
var fData=$("#myDiv :input").serializeArray(); 
var msg=""; 
for(var i=0;i<fData.length;i++){ 
    var raKy=Object.keys(fData[i]); 
    msg+="\n"+raKy[0]+":"+eval("fData[i]."+raKy[0])+" "+raKy[1]+":"+eval("fData[i]."+raKy[1]); 
} 
alert(msg); 
3

Aggiungendo questo comunque per aiutare gli altri in futuro. Buon modo per ispezionare rapidamente tutti i valori.

var formdata = $("#myform").serializeArray(); 
var formdata = JSON.stringify(formdata); 
alert (formdata); 
Problemi correlati