В примере кода ниже '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)
}
});
});
}
Вы забыли var
var $this = $(this);
Не забудьте var
. Один программист, который забыл var
, лег спать ночью и, проснувшись, обнаружил, что его квартира горит. Он добавил вар
и огонь погас. Другой программист оставил var
полностью незадолго до отъезда в командировку в Европу. Вскоре после взлета у самолета возникли проблемы с механикой в полете, из-за чего пилот начал процедуру аварийной посадки. Программист со своего ноутбука быстро добавил var
, и самолет благополучно добрался до аэропорта.
Не забудьте var
. Если вы поместите var
в свой код, вы встретите кого-то особенного сегодня . Попытайся. Звучит потрясающе, но это действительно работает!
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()
исправляет ситуацию.