题
我建立与复选框列表,创建列表后,我使用“每次”要经过所有这些,尝试应用点击程序。
这样我的代码正常工作:
$.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,无论是点击哪一个。 我在做什么错了?
解决方案
$检查被设定在每一个处理程序中,是一个全局变量。这意味着它会保留最后的值设定,是最后一个复选框。您需要设置它的点击处理程序中,如果你想这样做的权利。它更改为:
$.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'));
});
}
});
其他提示
要添加到克莱图斯的答案(我还不能发表评论)$支票成为一个隐含的全局变量,因为它的声明中缺少变种。
不隶属于 StackOverflow