AJAX Закрытие и ориентация на "это" - PullRequest
9 голосов
/ 11 июня 2010

В приведенном ниже примере кода функция обратного вызова успешно регистрирует «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 ]

12 голосов
/ 11 июня 2010

Вы забыли var

var $this = $(this);

Не забудьте var. Один программист, который забыл var, лег спать ночью и проснулся, чтобы найти его квартиру в огне. Он добавил var и огонь погас. Другой программист ушел var из полностью незадолго до отъезда в командировку в Европу. У самолета возникли механические проблемы в полете вскоре после взлета, в результате чего пилот начал процедуру аварийной посадки. Со своего ноутбука программист быстро добавил var, и самолет благополучно добрался до аэропорта.

Не забудьте var. Если вы введете var в свой код, вы встретите кого-то особенного сегодня . Попытайся. Звучит удивительно, но это действительно работает!

3 голосов
/ 11 июня 2010

Правильное использование Pointy для var, другая альтернатива - использовать $.proxy(), например:

function updateFields(){
 $('input.update').each(function(){
    $.ajax({
      data: 'id=' + this.id,
      success: $.proxy(function(resp){
                 $(this).val(resp);
               }, this)
    });
  });
}

Этот создатель замыканий заставит this обращаться к элементу ввода, когда вы находитесь внутри обратного вызова success, который обычно является тем, что вы ищете ... поэтому я не уверен, почему case по умолчанию, но в любом случае $.proxy() исправляет ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...