在下面的代码示例中,成功回调函数记录了“输入#04.update”四次而不是每个单独的输入,这有助于了解闭包如何工作,但我将如何定位每个个人输入使用此。AJAX Closures and targeting'this'
<input type="text" name="" id="01" class="update">
<input type="text" name="" id="02" class="update">
<input type="text" name="" id="03" class="update">
<input type="text" name="" id="04" class="update">
function updateFields(){
$('input.update').each(function(){
$this = $(this);
$.ajax({
data: 'id=' + this.id,
success: function(resp){
console.log($this);
$this.val(resp)
}
});
});
}
这太神奇了...但是......你能告诉我一个技术理由吗?我的意思是,我有时忘记添加'var' ...并且我没有遇到问题。但是你的话很可怕,从现在起我不会忘记添加'var'。无论如何...你有这种问题的技术解释吗? – Cristian 2010-06-11 14:11:59
原因:你的'成功'处理程序,匿名函数引用一个'$ this'变量是全局变量。因此,这个匿名函数的4个实例中的每一个都引用相同的变量,因此它们具有相同的值,因为它们在'each'函数返回后很长时间执行。 – Alsciende 2010-06-11 14:15:21
@Cristian - 没有'var',它是一个全局变量,你正在更新每个循环,而不是本地化到你想要的闭包范围。 – 2010-06-11 14:15:32