Переменные в функции setTimeout (jQuery)

  • Вы можете разность их
  • , можно объединить их
  • , любой может отредактировать их
  • , они просты и легки для контакта с
  • , они универсально доступны для тысяч инструментов
8
задан north 4 November 2009 в 02:59
поделиться

4 ответа

AnthonyWJones дал отличный ответ, но есть еще один похожий, который немного легче писать и читать. Вы просто сохраняете значение this в локальной переменной., Например.

var storedThis = this;
setTimeout(function() { $selector.val(storedThis.savVal); }, 1);
7
ответ дан 3 November 2019 в 14:19
поделиться

When you need to preserve the current this item when calling setTimeout use this structure:-

setTimeout((function(self) {
  return function() { $selector.val(self.savVal) };
})(this), 1);

This creates a closure from the outer functions execution context. The outer function returns an inner function that will have access the self parameter. Its the inner function that gets called when the timeout occurs yet the value of self will hold on to the original this value.

19
ответ дан 3 November 2019 в 14:19
поделиться

Вы, вероятно, могли бы сделать что-то подобное, если бы переменные, которые вы пытаетесь использовать, определены на каждом шаге цикла.

var myObj = {
  $selector: myConfigObj.$myCachedSelector
}

$.each([ myObj, mySecondObj, myThirdObj ], function(n, $selector) {
    setTimeout(function() {
        $selector.val(saveVal);
    }, 1);
});
1
ответ дан 3 November 2019 в 14:19
поделиться

спасибо за ответы

Сейчас я использую функцию внутри setTimeout. Но я обнаружил, что настоящая проблема заключается в другом: в каждой функции я пытаюсь получить доступ к свойствам объекта, которые указывают на свойства в объекте конфигурации, но результат (например, для this. $ Selector) - «undefined»

var myObj = {
  $selector: myConfigObj.$myCachedSelector
}

$.each([ myObj, mySecondObj, myThirdObj ], function() {
    //code
});                 

Не уверен, в чем проблема. Оба объекта находятся в одной функции / области действия.

0
ответ дан 3 November 2019 в 14:19
поделиться
Другие вопросы по тегам:

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