jQuery .attr Funktion Rückkehr nicht korrekt
Frage
Ich baue eine Liste mit Kontrollkästchen, nachdem die Liste erstellt wird, ich bin mit „.each“ durch sie gehen alle und versuchen, ein Klick Verfahren anzuwenden.
Ihr Code wie folgt funktioniert:
$.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'));
});
});
}
});
Doch sobald ich die Benachrichtigung ändern sein
alert($check.attr('itemid'));
Es zeigt immer nur die ID des letzten Eintrags in der Liste ganz gleich, welche angeklickt wird. Was mache ich falsch?
Lösung
ist $ check innerhalb der einzelnen Handler gesetzt und ist eine globale Variable. Das heißt, es wird die zuletzt eingestellte Wert beibehalten, die letzte Checkbox zu sein. Sie müssen es in den Click-Handler setzen, wenn Sie es richtig machen wollen. Ändern Sie es an:
$.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'));
});
});
}
});
. Hinweis: var
wird oben auf Steuerungsbereich verwendet
Auch Sie nicht verwenden each()
dafür brauchen. Dies entspricht:
$.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'));
});
}
});
Andere Tipps
Hinzufügen zu cletus' Antwort (kann ich nicht kommentieren noch) $ check eine implizite globale Variable immer, weil seine Erklärung fehlt var.