2010-06-12 5 views
1

Je souhaite appeler une fonction uniquement si le document est en cours de chargement. Comment puis-je?

+0

Ma question quand je vois ces questions est, pourquoi ne pas vous venez de mettre votre code à l'intérieur '$(). Prêt()'. Je suppose que c'est parce que vous voulez faire quelque chose alors que le document n'est pas prêt? –

Répondre

0

Vous pouvez exécuter une fonction normalement en JavaScript et le remplacer dans les jQuery.ready:

function foo() { 
    // … 
} 
$(document).ready(function() { 
    foo = function() {}; 
}); 
foo(); 

Maintenant, si foo appels se récursive, il arrêtera quand foo est redéfinie lorsque le document est prêt.

+3

Pourquoi ne pas utiliser une variable simple au lieu d'une méthode récursive? –

8

Vous pouvez vérifier document.readyState ou utiliser une simple variable dans la portée globale:

var ready = false; 
$(document).ready(function() { 
    ready = true; 
}); 
0

Vous pouvez utiliser l'objet différé jQuery très utile pour vérifier si le document a/n'a pas encore chargé:

http://api.jquery.com/category/deferred-object/

http://eng.wealthfront.com/2012/12/jquerydeferred-is-most-important-client.html

Par exemple,

(function($) {  
    var jqReady = $.Deferred(); 
    // Bind doc ready to my deferred object 
    $(document).bind("ready", jqReady.resolve); 

    // Check to see is doc is ready 
    if(jqReady.state() !== 'resolved'){ 
     alert('Doc is not ready'); 
    } 

    $.when(jqReady).then(function() { 
     // Code here will run when doc is ready/state === 'resolved' 
     alert('Doc is ready'); 
    }); 
})(jQuery);​ 

jsFiddle example

Questions connexes