jQuery .attr 函数未正确返回

标签 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。 我做错了什么?

最佳答案

$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/

相关文章:

javascript - jquery.get 仅在 Internet Explorer 中工作

php - 如果数据库出现故障,如何保留动态创建的输入字段值?

jquery - 增加重复元素的最高值

javascript - 如何检查each()迭代以promise()结束

javascript - 使用 jQuery each() 函数循环遍历类名元素

javascript - 在每个()中获取索引的总长度

jquery - 切换 float 菜单应该使内容更流畅

jQuery 向左滑动并显示

jQuery $.each() 反向/向后迭代

Javascript 关键字 "this"变为未定义