2010-06-13 8 views
0

J'essaie de profiter de l'effet flash lorsque je change l'emplacement de la fenêtre, mais il y a un petit problème que je n'arrive pas à résoudre.setTimeout ne fonctionne pas avec window.location?

regard sur le script s'il vous plaît

$(document).ready(function(){ 

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

window.location=this.href doit se faire après 1500ms, mais il ne se produit pas. pourriez-vous expliquer pourquoi? ce qui est étrange, quand j'essaie d'écrire alert("something"); au lieu de window.location=this.href, ça fonctionne très bien. Pourriez-vous expliquer pourquoi?

Merci

+0

pourquoi cela fonctionne quand j'ai écrit alert() ??? dans ce cas, il "dort" 1500ms, et après il rend alerte. Pourquoi? – Simon

Répondre

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

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

Vous êtes censé fournir une fonction de rappel comme la première PARAM setTimeout qui est appelée après 1500 ms.

3

setTimeout est et non équivalent à un Thread.sleep(1500); dans d'autres langues. setTimeout planifie un morceau de code à exécuter à un certain moment dans le futur et ne bloque pas. L'exécution passe immédiatement l'appel setTimeout et continue.

Le premier paramètre est soit une référence à une fonction, soit une chaîne qui sera évaluée.

Voir la réponse de meder pour la manière appropriée d'utiliser setTimeout, en évitant l'évaluation en utilisant une fonction anonyme.

+0

quotes = eval = badbad, utilisez lambdas à la place –

+0

setTimeout ("window.location = this.href;", 1500); ne fonctionne pas, j'ai essayé. mais je comprends la logique, merci. mais pourquoi ça marche bien, quand j'ai écrit alert(); ??? – Simon

+2

'this' dans ce contexte est probablement' window' et pas l'élément 'a'. Avez-vous essayé ma réponse? –

Questions connexes