2011-02-21 5 views
0

Comment puis-je vérifier que mon document ne contient qu'une instance de $(document).ready(function()?

Si elle est incluse plusieurs fois, puis-je supprimer des instances en double (de manière similaire à la fonction require_once(); de PHP)?

+2

écrire en mode javascript? : P – Petrogad

+0

juste comme une note de côté: il est parfaitement bien d'avoir plusieurs fonctions '$ (document) .ready', elles seront appelées dans l'ordre où elles ont été ajoutées. – BrokenGlass

+0

@BrokenGlass: Ils ne sont pas toujours appelés dans l'ordre: http://bugs.jquery.com/ticket/7279 - cela ne se produit que si vous vous liez à l'événement ready. – Mottie

Répondre

3

Êtes-vous en train de dire que le même code pourrait être ajouté plus d'une fois?

Si oui, je suppose que vous pourriez définir une propriété globale indiquant si le code à l'intérieur a déjà été exécuté, puis tester cette propriété dans le gestionnaire ready().

$(document).ready(function() { 

     // check a flag to see if this has been called yet 
    if(!window.thisCodeHasRun) { 
      // set the flag to show this has been called 
     window.thisCodeHasRun = true; 

     /* run your code */ 
    } 
}); 

Il serait préférable de prendre soin de ce côté serveur, mais si vous devez le faire côté client, cela devrait fonctionner.

0

Une option consiste à utiliser lier et délier:

$(document).bind("ready",function(){ 
    console.log("zero"); 
    }); 

    $(document).bind("ready",function(){ 
    console.log("one"); 
    }); 

    // get rid of previous ready events 
    $(document).unbind("ready"); 

    $(document).bind("ready",function(){ 
    console.log("two"); 
    }); 

Dans ce qui précède, le premier et le deuxième événement prêt ne sera jamais le feu parce unbind a été appelé. Donc vous aurez "deux" dans la console.

+1

Le code d'événement prêt ne fonctionne pas toujours dans l'ordre, donc cela ne fonctionnerait pas comme prévu: http://bugs.jquery.com/ticket/7279 – Mottie

+0

+1 c'est assez intéressant – Zevan

Questions connexes