Domanda

Sto creando un elenco con caselle di controllo, dopo aver creato l'elenco sto utilizzando ".each" per esaminarli tutti e provare ad applicare una procedura di clic.

Il mio codice come questo funziona bene:

$.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'));
            });
        });
    }
});

Tuttavia, non appena cambio l'avviso in essere

alert($check.attr('itemid'));

Mostra sempre e solo l'ID dell'ultimo elemento nell'elenco, indipendentemente da quale si fa clic.Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

$check è impostato all'interno di ciascun gestore ed è una variabile globale.Ciò significa che manterrà l'ultimo valore impostato, essendo l'ultima casella di controllo.È necessario impostarlo all'interno del gestore dei clic se si desidera farlo correttamente.Cambialo in:

$.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 viene utilizzato sopra per controllare l'ambito.

Inoltre, non è necessario utilizzarlo each() per questo.Questo è 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'));
    });
  }
});

Altri suggerimenti

Per aggiungere alla risposta Cletus' (non posso commentare ancora) $ controllo sta diventando una variabile globale implicito perché la sua dichiarazione manca var.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top