Закрытия Ajax и предназначающийся для 'этого'

В примере кода ниже '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)
      }
    });
  });
}
9
задан screenm0nkey 11 June 2010 в 13:45
поделиться

2 ответа

Вы забыли var

var $this = $(this);

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

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

12
ответ дан 4 December 2019 в 13:45
поделиться

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() исправляет ситуацию.

3
ответ дан 4 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: