2009-07-26 9 views
2

Je construis une liste avec des cases à cocher, une fois la liste créée. J'utilise ".each" pour les parcourir et essayer d'appliquer une procédure de clic.jQuery La fonction .attr ne retourne pas correctement

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 dans la liste non importe lequel est cliqué. Qu'est-ce que je fais de mal?

Répondre

4

$ check est défini dans chaque gestionnaire et est une variable globale. Cela signifie qu'il conservera la dernière valeur définie, étant la dernière case à cocher. Vous devez le définir 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')); 
     }); 
    }); 
    } 
}); 

Note:var est utilisé ci-dessus pour contrôler la portée. En outre, vous n'avez pas besoin d'utiliser each() pour cela. 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')); 
    }); 
    } 
}); 
2

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.

Questions connexes