2012-10-09 3 views
3

Je suis dans une situation où, dans certaines conditions, je souhaite que les gestionnaires jQuery ready soient tenus de ne pas se déclencher réellement sur l'événement DOMContentReady. Ces gestionnaires sont liés à divers endroits, y compris divers fichiers d'inclusion, plugins et ainsi de suite. Donc, bien que je puisse définir une sorte de variable globale dans un script près du haut de ma page, et mettre une condition if pour vérifier cette variable devant chaque liaison $(document).ready(), je préfère ne pas.Empêche les gestionnaires prêts jQuery de tirer

Idéalement je suis à la recherche d'une des deux choses,

  • une propriété que je pourrais mettre sur l'objet jQuery avant includes qui raconterait à ignorer les appels à .ready()
  • une méthode que je pourrais appeler vers la fin du document, dans un script en ligne avant le lancement de DOMContentReady, pour libérer les gestionnaires ready().

L'évidente, $(document).unbind('ready') ne le fait pas, je suppose que .ready() est pas un événement ordinaire contraignant.

Est-ce que cela peut être fait? Si c'est le cas, comment? Une idée vague que j'avais était d'étendre le prototype de jQuery, et de remplacer ready() par une méthode qui vérifierait une nouvelle propriété que je présenterais. Cela a-t-il du sens?

+0

Où êtes-vous mettre votre code 'unbind'? Si vous le placez avant la fonction 'ready', il n'est pas censé le" dissocier ". Si vous le mettez à l'intérieur ou après la fonction 'ready'. Il a déjà été appelé. Vous pouvez retourner 'false' dans la fonction' ready', si une condition particulière est trouvée. – Jashwant

+0

Non, le problème est que les appels à '$ (document) .ready()' ne sont pas annulés par '$ (document) .unbind ('ready')'. Je ne sais pas exactement pourquoi. – Dan

+0

Je peux vous clarifier, si vous pouvez montrer votre code. Btw, il semble que vous avez déjà trouvé une réponse – Jashwant

Répondre

7

vous devez utiliser holdready

$.holdReady(true); 
$.getScript("myplugin.js", function() { 
    $.holdReady(false); 
}); 
+0

Cela semble prometteur. Je n'ai pas mon environnement de développement devant moi en ce moment, mais je pense que c'est exactement ce dont j'ai besoin. – Dan

+0

Encore une autre caractéristique cachée de jQuery. +1 – Jashwant

Questions connexes