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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top