jQuery .attr函数无法正确返回

时间:2009-07-26 15:38:09

标签: jquery each

我正在构建一个带有复选框的列表,在创建列表后我使用“.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,无论点击哪一项。 我做错了什么?

2 个答案:

答案 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。