我有一个奇怪的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);
});
});
答案 0 :(得分:2)
考虑一下你正在做什么的时间。循环遍历一些元素,每次将对同一tr
变量的引用更改为当前元素。然后,您进行异步ajax调用并注册回调。循环继续运行并完成,因此tr
的值自然是最后一个值。
然后你的回调开始触发,他们使用相同变量(tr
)的结束值。
为了达到你想要的效果,显而易见的解决方案是每次通过循环创建一个 new tr
,它会在你的回调中被关闭。要做到这一点,只需在循环中声明它(否则你要创建一个全局)。
var tr = $(this)