我正在构建一个带有复选框的列表,创建列表后,我使用“.each”遍历所有复选框并尝试应用点击过程。
我的代码这样工作正常:
$.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'));
});
});
}
});
但是,一旦我将警报更改为
alert($check.attr('itemid'));
无论单击哪一项,它都只显示列表中最后一项的 ID。 我做错了什么?
最佳答案
$check 在每个处理程序内部设置,并且是一个全局变量。这意味着它将保留最后设置的值,即最后一个复选框。如果您想正确执行此操作,则需要将其设置在单击处理程序中。将其更改为:
$.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'));
});
});
}
});
注意:上面使用 var
来控制范围。
此外,您不需要为此使用 each()
。这等效于:
$.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'));
});
}
});
关于jQuery .attr 函数未正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1184860/