Question

Je construis une liste avec des cases à cocher, une fois la liste créée J'utilise « .Chaque » passer par tous et en essayant d'appliquer une procédure de clic.

Mon code comme ceci fonctionne très 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'));
            });
        });
    }
});

Cependant, dès que je change l'alerte pour être

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

Il ne montre jamais l'identifiant du dernier élément de la liste, peu importe que l'on clique dessus. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

$ check est placé à l'intérieur du chaque gestionnaire et est une variable globale. Cela signifie qu'il va conserver le dernier jeu de valeur, étant la dernière case. Vous devez le mettre dans le gestionnaire de clic si vous voulez le faire correctement. Changer à:

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

Remarque: var est utilisé ci-dessus pour contrôler la portée

.

, vous n'avez pas besoin d'utiliser pour cette each(). Ceci est équivalent:

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

Autres conseils

Pour ajouter à la réponse de Cletus (je ne peux pas encore de commentaire) chèque de $ devient une variable globale implicite parce que sa déclaration manque var.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top