fonction jQuery .attr ne pas retourner correctement
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?
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.