jQuery每个只影响最后一个实例

时间:2017-04-28 13:51:34

标签: jquery

我有一个奇怪的jQuery问题很可能最终会成为一个荒谬的小问题,但在搜索了一段时间之后我仍然无法超越它。

问题
我有一个包含域列表的表。该表由两列组成 - 域名和IP地址。

IP地址列加载了加载图标的内容,然后假设将替换为ajax调用的内容。

该脚本应该对每个IP列上的数据属性执行jQuery each(),获取数据并执行.get请求,然后返回该域ip。

问题 当.each运行时,它会检查ip地址并仅替换最终的rowloading图标。

代码

$("[data-domain]").each(function(){
        domain = $(this).data('domain');
        tr = $(this);

        $.get( "/database/ajax/domain/check", { domain: domain } )
          .done(function( data ) {
            tr.html(data);
          });
    });

1 个答案:

答案 0 :(得分:2)

考虑一下你正在做什么的时间。循环遍历一些元素,每次将对同一tr变量的引用更改为当前元素。然后,您进行异步ajax调用并注册回调。循环继续运行并完成,因此tr的值自然是最后一个值。

然后你的回调开始触发,他们使用相同变量tr)的结束值。

为了达到你想要的效果,显而易见的解决方案是每次通过循环创建一个 new tr,它会在你的回调中被关闭。要做到这一点,只需在循环中声明它(否则你要创建一个全局)。

var tr = $(this)