jQuery et setTimeout

J’ai le code suivant:

jQuery(document).ready(function() { setTimeout($('#loading').fadeIn('slow'), 9999); }); 

qui devrait fondre lentement dans l’élément de chargement après 9999 millisecondes mais au contraire il disparaît tout de suite … pourquoi?

Quelqu’un peut-il aider. Merci

Pour faire ce que vous voulez, vous devez envelopper la substance jQuery dans une fonction anonyme:

 setTimeout(function () { $('#loading').fadeIn('slow'); }, 9999); 

La fonction setTimeout (et setInterval également) doit indiquer ce qu’il faut faire après le délai. Et il n’y a que trois façons de dire quoi faire:

  1. Avec une chaîne de JavaScript qu’il faut eval :

     setTimeout('$("#loading").fadeIn("slow")', 9999); 

    Parce que cela utilise eval et peut devenir très laid, ce n’est pas recommandé. Mais ça marche bien.

  2. Avec une référence de fonction:

     var test = function () { $('#loading').fadeIn('slow'); }; setTimeout(test, 9999); 

    Notez que je n’ai pas fait setTimeout(test(), 9999) . Je viens de lui donner le nom de la fonction.

  3. Avec une fonction anonyme que vous construisez à la volée, c’est ce que j’ai fait dans le premier bloc de code ci-dessus.

Si vous essayez de faire quelque chose comme setTimeout(test(), 9999) , le navigateur exécutera d’ abord test() , puis donnera la valeur de retour à setTimeout . Donc dans votre tentative …

 setTimeout($('#loading').fadeIn('slow'), 9999); 

… le navigateur exécutait ce programme jQuery, se #loading dans l’élément #loading , puis donnait le retour fadeIn à setTimeout . En l’ fadeIn , la fonction fadeIn renvoie un object jQuery. Mais setTimeout ne sait pas quoi faire avec les objects, donc rien ne se passera après le délai de 9999 millisecondes.

La fonction settimeout () vient de javascript et prend une fonction comme argument.

Le meilleur choix serait d’utiliser la fonction intégrée delay () de jQuery:

  jQuery(document).ready(function() { $('#loading').delay(9999).fadeIn('slow'); }); 

Plus d’informations / exemples: http://api.jquery.com/delay/

setTimeout accepte une fonction en tant que premier paramètre – vous passez actuellement un sélecteur jQuery, qui est immédiatement évalué et exécute l’opération fadeIn . Passez plutôt une fonction anonyme:

 setTimeout(function() { $('#loading').fadeIn('slow'), 9999); }, 9999); 

Vous pouvez également utiliser .delay () de jQuery.

$ (‘# chargement’). delay (9999) .fadeIn (‘slow’);