2010-11-21 19 views
13

tengo este código HTML:¿Cómo accedo a los valores creados por serializeArray en JQuery?

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

Y creo una matriz de objetos de esta manera:

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

Ahora, ¿cómo accedo a 'título' en dataArray? Esto no funciona:

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

Respuesta

14

Similar a lo que Nick ha escrito, pero un poco más limpio

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

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

luego acceder a la misma forma

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

Así:

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

Gracias, pero ¿y si tengo varios campos de entrada y no deseo confiar en el pedido? – bart

+2

No está confiando en la orden, el nombre es la identificación y el valor es el valor, simplemente no están en un objeto como esperaba, deberá iterar sobre la matriz y procesar las cosas a medida que las encuentre . – Tom

2

Run console.log(dataArray);, a continuación, abra el inspector de propiedades, y comprobar la consola. En Chrome, haga clic derecho y seleccione "Inspeccionar elemento" y luego haga clic en el ícono "> =" que se ve en la esquina inferior izquierda, es el segundo desde la izquierda.

En Firefox que te instala incendiario y hay una pestaña llamada "consola"

No está seguro de si está disponible en el IE, probablemente algo en las herramientas de desarrollo (prensa f12), pero yo no recomendaría el desarrollo en IE.

De todos modos esto mostrará el objeto de una manera que le permite navegar y ver los valores de cada elemento. De esa manera usted puede entonces usar esto para descifrar cómo acceder a los valores :)

Buena suerte

23

Puede producirse un bucle a través, as @Tom has ... o si accede a más de uno, ser un poco más eficiente y bucle de una vez, la creación de un objeto como éste:

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

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

a continuación, se puede acceder a ella como desee, por ejemplo:

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

You can test it out here .

+1

¡¡Muy lindo !!! ¡Esto funciona muy bien empujándolo a un procesador de formularios php! –

1

append/eco/impresión dataArray[0].name a un div le dará 'título'

1

Alerte serializeErray de entradas en myDiv (nota: el selector :input incluirá también las etiquetas select y 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

Agregando esto de todos modos para ayudar a otros en el futuro. Una buena forma de inspeccionar rápidamente todos los valores.

var formdata = $("#myform").serializeArray(); 
var formdata = JSON.stringify(formdata); 
alert (formdata); 
Cuestiones relacionadas