在下面的代码示例中,成功回调函数将'input#04.update'记录四次而不是每个单独的输入,这有助于了解闭包是如何工作的,但我将如何使用它来定位每个单独的输入。
<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)
}
});
});
}
答案 0 :(得分:12)
您忘记了var
var $this = $(this);
不要忘记var
。一位忘了var
的程序员晚上睡觉,醒来发现他的公寓着火了。他补充说var
然后大火灭了。另一名程序员在离开欧洲出差前不久完全离开了<{1}} 。飞机起飞后不久飞机发生飞行中的机械问题,导致飞行员启动紧急着陆程序。程序员从他的笔记本电脑上迅速添加了var
,飞机将它安全地送到机场。
不要忘记var
。如果您在代码中添加了var
,那么今天就会遇到一个特殊的 。试试吧。这听起来很神奇,但确实有效!
答案 1 :(得分:3)
Pointy在var
使用时是正确的,另一种选择是使用$.proxy()
,如下所示:
function updateFields(){
$('input.update').each(function(){
$.ajax({
data: 'id=' + this.id,
success: $.proxy(function(resp){
$(this).val(resp);
}, this)
});
});
}
当你进入this
回调时,这个闭包创建者会让success
引用输入元素,这通常就是你所追求的......所以我不知道为什么会这样不是默认情况下的情况,但无论如何$.proxy()
可以纠正这种情况。