2010-06-09 20 views
6

Básicamente, estoy tratando de reunir los ID de cada elemento con una clase específica y colocar esos ID en una matriz. Estoy usando jQuery 1.4.1 y he intentado usar .each(), pero realmente no lo entiendo o cómo pasar la matriz fuera de la función.jQuery .each() con Array

$('a#submitarray').click(function(){ 

    var datearray = new Array(); 

    $('.selected').each(function(){ 
     datearray.push($(this).attr('id')); 
    }); 

    // AJAX code to send datearray to process.php file 

}); 

Estoy seguro de que estoy muy lejos, ya que soy bastante nuevo en esto, por lo que cualquier consejo sería increíble. ¡Gracias!

+0

Si la llamada AJAX está * dentro * del controlador, esto debería ser correcto. Si llama a otra función, debe pasar el datearray como argumento o simplemente crear la variable fuera del controlador. Ver mi respuesta a continuación. – user113716

Respuesta

0

Todo se ve bien para mí, la matriz se completará y estará disponible donde haya realizado el comentario. Ten fe en ti mismo.

12

Se puede utilizar también map():

$('a#submitarray').click(function(){ 

    var datearray = $('selected').map(function(_, elem) { 
    return elem.id; 
    }).get(); // edited to add ".get()" at the end; thanks @patrick 
    // ajax 

}); 

El método map() pasa cada índice (que mi ejemplo no utiliza) y el elemento en la función dada, y construye una matriz para que a partir de los valores de retorno.

+2

@Pointy - Loooove 'map()'! Simplemente no te olvides de encadenar '.get()' al final, de lo contrario 'datearray' contendrá un objeto jQuery en lugar de solo la matriz. – user113716

+0

Oh, cierto; gracias @patrick! ¿No te gustaría que jQuery tuviera una "reducción" en el núcleo también? – Pointy

+0

@Pointy - Ya sabes, la única vez que me he encontrado (o pensado) en reducir fue cuando estaba jugando un poco con CouchDB. Es un poco interesante de funcionalidad. – user113716

4

Pruebe con map función de jQuery:

datearray = $('.selected').map(function(){ 
    return $(this).attr('id'); 
}).get(); 

// use ajax to send datearray 
+0

El código '= new Array()' en la primera línea es innecesario. La segunda declaración reemplaza la matriz. – Greg

+0

Mismo comentario que le di a Pointy. Si no encadena '.get()' al final de '.map()', 'datearray' contendrá un objeto jQuery en lugar de solo su matriz. – user113716

+0

@Greg, @patrick: buenos puntos chicos. Gracias – Sarfraz

1

Usted no tiene que pasar en la matriz de la función anónima, ya que vive en el mismo ámbito.

+0

Esto es cierto. Cualquier función creada dentro de otra tiene alcance para las variables de funciones que lo contienen. Como tal, después de cada ejecución, tendrás tus datos en datearray y puedes pasar el datearray a tu función de ajax. –

0

Se debe cargar la matriz; puede enviarlo al servidor mediante jQuery.post ...

$.post("process.php", datearray, function(dat) { 
    alert('Response: ' + dat); 
}); 
1

Sobre la base de las otras respuestas, aquí es una versión simplificada:

var datearray = $('selected').map(function() { 
    return this.id; 
}).get(); 

La función map obtiene el ID de cada elemento, y el La función get devuelve una matriz. Dentro de la función anónima pasada a map, this se refiere a cada elemento seleccionado sucesivamente.