我正在构建一个带有复选框的列表,在创建列表后我使用“.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,无论点击哪一项。 我做错了什么?
答案 0 :(得分:4)
$ 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'));
});
}
});
答案 1 :(得分:2)
要添加到cletus的答案(我还不能发表评论),$ check正在成为隐含的全局变量,因为它的声明缺少var。