2012-05-19 25 views
9

Estoy tratando de obtener el valor de entrada en cada bucle de una casilla de verificación, no puedo encontrar la manera de hacerlo funcionar, el valor sigue produciendo como el primer valor de la casilla de verificación.jQuery obtener el valor de entrada en. Cada bucle

$('.custemb, input[name=cb], input[class=multadd]').live("click", function() { 

    $('input[class=multadd]:checked').each(function(index) { 
     val = index + 2; 
     valu = $('input[class=multadd]:checked').val(); 
     multiz = multiz + '&aid' + val + '=' + valu; 
    }); 
}); 

el problema es la salida de la variable valu es la primera casilla de verificación de la general cada bucle, no la casilla de verificación actual del bucle, necesito el valor actual.

¿Alguna idea?

Respuesta

31

Puede utilizar this para acceder al elemento de corriente en el bucle:

valu = $(this).val(); 

El elemento actual también se envía como un parámetro a la función de devolución de llamada, para que pueda recogerlo:

.each(function(index, elem) { 

A continuación, utilice el parámetro:

valu = $(elem).val(); 
+0

Me gustaría preguntar ¿Por qué tengo que usar el selector en "elem" para acceder al valor si "elem" ya es el elemento de entrada? Gracias – mkmnstr

+1

@mkmnstr: Porque 'elem' es el elemento, no un objeto jQuery para el elemento. La función '$()' toma diferentes tipos de parámetros, no solo selectores. Si envía un elemento, simplemente creará un objeto jQuery que contenga ese elemento. La llamada '$ (this)' en el primer ejemplo usa la función de la misma manera. – Guffa

+0

gracias por la explicación, está todo claro ahora! ¡Aclamaciones! – mkmnstr

3
$('.custemb, input[name=cb], input[class=multadd]').live("click", function() { 

    $('input[class=multadd]:checked').each(function(index) { 
     var $this = $(this); 
     val = index + 2; 
     valu = $this.val(); 
     multiz = multiz + '&aid' + val + '=' + valu; 
    }); 
}); 
+1

'each()' ofrece un segundo parámetro 'element' que es una alternativa a' this' –

+1

@AndreasNiedermair que probablemente salvar a uno búsqueda y rendimiento de microincrease. Buena llamada, amigo –

+1

no lo entendiste ... usando el segundo parámetro puedes (en otro caso) extraer el método para cada iteración y, por lo tanto, tal vez crear un escenario mágicamente de reutilización ... –

2

Uso this para encontrar el control que se ha hecho clic

$('input[class=multadd]:checked').each(function(index) { 
     val = index + 2; 
     valu = $(this).val(); 
     multiz = multiz + '&aid' + val + '=' + valu; 
    }); 
+1

o use el segundo parámetro' element' ... –

1
var texts= $(".class_name").map(function() { 
    return $(this).val();   
}).get(); 
+0

por qué la necesidad de .get() es una función AJAX. – Kivylius

Cuestiones relacionadas