2010-06-13 2 views
0

Я стараюсь использовать богатый flash-эффект при изменении местоположения окна, но есть небольшая проблема, я не могу решить.setTimeout не работает с window.location?

взгляд на сценарий пожалуйста

$(document).ready(function(){ 

      $('a.flash').click(function(e) { 
       e.preventDefault(); 
       $('body').fadeOut(1500); 
       setTimeout("", 1500); 
       window.location=this.href; 
      }); 
     }); 

window.location=this.href должно быть сделано после того, как 1500ms, но этого не происходит. Не могли бы вы объяснить, почему? Что странно, когда я пытаюсь написать alert("something"); вместо window.location=this.href, он отлично работает. Не могли бы вы объяснить, почему?

Благодаря

+0

Почему он работает, когда я писал alert() ??? в этом случае он «спит» 1500 мс, а после этого предупреждает. Зачем? – Simon

ответ

7
$(document).ready(function(){ 

      $('a.flash').click(function(e) { 
       var el = this; 
       e.preventDefault(); 
       $('body').fadeOut(1500); 
       setTimeout(function() { location=el.href }, 1500); 
      }); 
     }); 

Вы должны предоставить функцию обратного вызова в качестве первых паров из SetTimeout, который вызывается после 1500 мса.

3

setTimeoutне эквивалент Thread.sleep(1500); на других языках. setTimeout планирует часть кода, который будет запущен в какой-то момент в будущем и не блокирует. Выполнение немедленно передает вызов setTimeout и продолжается.

Первый параметр - это ссылка на функцию или строку, которая будет оцениваться.

См. Ответ медитера для соответствующего способа использования setTimeout, избегая оценки с помощью анонимной функции.

+0

quotes = eval = badbad, вместо этого использовать lambdas –

+0

setTimeout ("window.location = this.href;", 1500); не работает, я попробовал. но я понимаю логику, спасибо. но почему это работает нормально, когда я написал alert(); ??? – Simon

+2

'this' в этом контексте, вероятно, относится к' window', а не к элементу 'a'. Вы пробовали мой ответ? –

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