2

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

4

2 回答 2

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'));
    });
  }
});
于 2009-07-26T15:56:46.780 回答
2

添加到 cletus 的答案(我还不能评论) $check 正在成为一个隐含的全局变量,因为它的声明缺少 var。

于 2009-07-26T16:01:59.030 回答