2013-06-16 1 views
0

У меня есть следующий код для того, чтобы каждый из .feedcontain div исчезал после увеличения задержки. Анимация и форматирование прекрасны, просто я не могу иметь ключевое слово this в первом параметре setTimeout().Как бы получить ключевое слово 'this' в параметре setTimeout?

function goFadeNow(){ 
    var loopdelay=250; 
    $(".feedcontain").each(function() { 
     setTimeout('$('+this+').addClass("appeared");',loopdelay); 
     //$(this).addClass("appeared"); 
     loopdelay=loopdelay+250; 
    }); 
} 

Если я раскомментирую строку 5 и строку комментария 4, она работает, но у нее нет задержки. PS: Я понимаю, что не могу просто использовать this как обычную переменную.

ответ

2
function goFadeNow(){ 
    var loopdelay=250; 
    $(".feedcontain").each(function() { 
     var $this = $(this); 
     setTimeout(function() { 
      $this.addClass("appeared"); 
     }, loopdelay); 
     loopdelay=loopdelay+250; 
    }); 
} 
+2

Почему вы оба ответа и близкий голос? –

+1

@BenjaminGruenbaum http://meta.stackexchange.com/questions/4283/closing-etiquette-why-do-some-answer-and-close/4288#4288 –

+0

Спасибо за разъяснение –

3

Вы также можете bind() функция, которую вы передаете в this указатель:

function timeoutFunc() { 
    $(this).addClass("appeared"); 
} 

function goFadeNow(){ 
    var loopdelay=250; 

    $(".feedcontain").each(function() { 
    setTimeout(timeoutFunc.bind(this), loopdelay); 
    loopdelay=loopdelay+250; 
    }); 
} 
+0

Какое преимущество, по вашему мнению, предлагает ответ Мэтта, если он есть и почему? –

+2

Решение Matt's сохраняет контекст функции 'goFadeNow', но автор вопроса попросил передать контекст функции' each'. Идея такая же, но мы можем работать с разными значениями 'this' в' timeoutFunc', просто переставляя ее в разные контексты. –

Смежные вопросы