.attr función jQuery no volver correctamente
Pregunta
Estoy construyendo una lista con casillas de verificación, una vez creada la lista que estoy usando ".Cada" para pasar por todos ellos y tratando de aplicar un procedimiento clic.
Mi código como esto funciona bien:
$.ajax({
url: "./views/todoitems.view.php",
data: "cmd=list",
success: function(html){
$('#list-container').empty().append(html);
$('input:checkbox').each(function(){
$check = $(this);
$check.click(function(){
alert($(this).attr('itemid'));
});
});
}
});
Sin embargo, tan pronto como puedo cambiar la alerta para estar
alert($check.attr('itemid'));
Es solamente siempre muestra el ID del último elemento de la lista no importa que uno se hace clic. ¿Qué estoy haciendo mal?
Solución
$ verificación se establece dentro de la cada manipulador y es una variable global. Eso significa que va a retener el último conjunto de valores, siendo la última casilla. Es necesario establecer que en el interior del controlador de clic si quieres hacerlo bien. Cambiarlo a:
$.ajax({
url: "./views/todoitems.view.php",
data: "cmd=list",
success: function(html) {
$('#list-container').empty().append(html);
$('input:checkbox').each(function(){
$check.click(function() {
var $check = $(this);
alert($check.attr('itemid'));
});
});
}
});
Nota: var
se utiliza anteriormente para controlar alcance
Además, no es necesario utilizar each()
para esto. Esto es equivalente:
$.ajax({
url: "./views/todoitems.view.php",
data: "cmd=list",
success: function(html) {
$('#list-container').empty().append(html);
$('input:checkbox').click(function() {
alert($(this).attr('itemid'));
});
}
});
Otros consejos
Para añadir a la respuesta de Cletus (que no puedo comentar aún) $ cheque está convirtiendo en una variable global implícita porque su declaración no se encuentra var.