AJAX闭包和定位'这个'

时间:2010-06-11 13:45:39

标签: javascript jquery

在下面的代码示例中,成功回调函数将'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)
      }
    });
  });
}

2 个答案:

答案 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()可以纠正这种情况。