7
votes

Effacer un document JQuery.Ready () appel

Comment effacer les fonctions anonymes définies sur déclencheur via un document jQuery .Ready () code> appel?

Par exemple: P>

<script type="text/javascript">
    //some code sets a doc ready callback
    $(document).ready(function ()
    {
        alert('ready');
    });
    
    //my attempt to prevent the callback from happening
    window.onload = null;
    $(document).unbind("ready");
    
</script>


1 commentaires

Il est possible de définir plus d'une fonction prêt , donc je ne suis pas surpris que Unbind ne fonctionne pas. Une solution hacky serait de définir une variable globale et de tout emballier à l'intérieur de la fonction dans un si pour tester la valeur - il suffit de modifier la valeur et tandis que le La fonction sera toujours exécutée, son contenu ne sera pas ...


4 Réponses :


0
votes

$ (document) .Readady () dépend de l'événement surload déclenché par le navigateur qui signifie que vous ne pouvez pas l'empêcher de se produire. Si l'alerte () est déterminée par une certaine condition, j'utiliserais une instruction IF / SNUE pour décider si elle s'appelle.


1 commentaires

Ce n'est pas le cas. $ (document) .Readady () est généré par JQuery et il existe des moyens de l'arrêter de se produire.



6
votes

Vous obtiendrez probablement la réponse la plus appropriée si vous avez décrit le problème que vous essayez vraiment de résoudre.

JQuery n'a pas de manière documentée publiquement pour annuler ou bloquer le document.Ready () des gestionnaires. Si vous contrôlez le code, vous pouvez utiliser une variable globale et un conditionnel comme celui-ci: xxx

ou, si vous souhaitez pirater une jQuery un peu (au-delà des interfaces documentées) , vous pouvez faire ceci: xxx

Vous pouvez voir ce dernier travail ici: http://jsfiddle.net/jfriend00/zjh2k/ . Cela fonctionne parce que jQuery utilise la propriété: $. ISREady pour garder une trace de si elle a déjà tiré les gestionnaires prêts ou non. La définition sur True fait penser que cela les a déjà tirés, de sorte que cela ne le fera plus à nouveau.


7 commentaires

Je ne contrôle pas le code. Je crée un extrait JavaScript pouvant être inclus sur un site Web d'un client qui remplacera une partie de leur contenu. Malheureusement, ils ont des rappels qui attendent une partie du contenu remplacé pour être là, d'où une erreur. Je pensais que si je pouvais remplacer leurs appels prêts doc particulièrement, cela résoudrait alors le problème.


WOW - Vous essayez de bloquer tout le code d'initialisation de JQuery. J'espère que vous savez ce que vous faites parce que beaucoup de choses peuvent se casser si vous faites cela. Qu'en est-il du code initial légitime qui doit être exécuté? Quoi qu'il en soit, j'ai ajouté une autre option qui peut être faite sans modifier le code à l'intérieur du gestionnaire prêt. Il me semble que vous devriez laisser le code prêt régulier et le contenu de la page régulière exécuté puis, après avoir exécuté, vous remplacez des trucs dans la page.


Oui, je comprends comment cela semble effrayant, mais nous avons la permission de le faire. Je suis ouvert au piratage dans JQuery un peu, mais nous avons un autre code qui doit fonctionner sur Doc.Ready. Le 2ème exemple semble faire exactement ce dont j'ai besoin ... bien qu'il semble contre-intuitif - la définition isready to True me ferait penser que nous déclenchons Doc.ready ...


Si vous regardez la source de jQuery, isready est juste un drapeau qu'il utilise pour garder une trace de si elle a déjà exécuté les manutentionnaires prêts ou non pour que cela ne fonctionne jamais plus d'une fois. Cela ne le déclenche pas. Cela fait cela parce qu'il existe plusieurs événements qui peuvent le déclencher et il ne veut aller que sur le premier événement qui incendie.


Parfait - $ .isReady est exactement ce dont j'avais besoin. Je sais que c'est un peu hacky, mais je préfère avoir une solution hacky qui ne produit pas d'erreurs qu'une solution «légitime» qui échoue.


Il existe une manière documentée publiquement de conserver l'exécution des fonctions liées à $ (document) .Ready (fn) , en utilisant $. Holdready (bool) . Passez-le true pour les faire attendre, puis passe false pour les laisser tirer. Ajouté à JQuery 1.6 - API.JQUERY.COM/JQUERY.HENDREDYREDREDY


Merci, Russ, c'est une fonction géniale!



1
votes

Ceci fonctionne:

$(document).bind("ready", function () { alert("hey!"); });
$(document).unbind("ready");


3 commentaires

Agréable! Je me demande donc quelle est la différence entre appeler $ (document) .Ready (...) vs. $ (document) .bind ("prêt", ...). Dommage que la documentation d'engourdi indique que cela n'affecte que ces rappels définis via un appel BIND ().


@Shanen - La différence est que .bind ("prêt", gestionnaire) ne sera pas appelé si l'événement prêt est déjà tiré. Ils s'appellent également en dernier, après tous les manutentionnaires liés de manière la plus courante.


Au mieux que je puisse dire de regarder la source, le $ (document) .Bind ("prêts") Les gestionnaires seront appelés après les autres gestionnaires prêts et ils sont les seuls qui peuvent être supprimés avec $ (document) .unbind () . Vous ne pouvez pas supprimer un $ (document) .Ready () gestionnaire avec un engourdi car ils sont stockés différemment.



0
votes

Super vieille question, mais est tombé sur la nécessité de le faire récemment pour prévenir le document.Ready Code Je n'ai pas contrôlé de fonctionner dans certains cas. Cela peut être atteint par la fonction prête de JQuery de JQuery, plutôt comme un test d'espionnage. Ce qui suit fonctionnera: xxx

tous les appels vers $ (document) .Ready sera maintenant ignoré. Vous pouvez remplacer ce comportement en passant true comme deuxième argument: $ (document) .Ready (fn, true)


0 commentaires