Comment effacer les fonctions anonymes définies sur déclencheur via un document jQuery Par exemple: P> .Ready () code> appel?
<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>
4 Réponses :
$ (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. P>
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.
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: p> ou, si vous souhaitez pirater une jQuery un peu (au-delà des interfaces documentées) , vous pouvez faire ceci: p> Vous pouvez voir ce dernier travail ici: http://jsfiddle.net/jfriend00/zjh2k/ . Cela fonctionne parce que jQuery utilise la propriété: $. ISREady code> 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. P> P>
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 code> 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) code>, en utilisant
$. Holdready (bool) code>. Passez-le
true code> pour les faire attendre, puis passe
false code> pour les laisser tirer. Ajouté à JQuery 1.6 - API.JQUERY.COM/JQUERY.HENDREDYREDREDY
Merci, Russ, c'est une fonction géniale!
Ceci fonctionne:
$(document).bind("ready", function () { alert("hey!"); }); $(document).unbind("ready");
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) code> ne sera pas appelé si l'événement
prêt code> 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") code> 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 () code>. Vous ne pouvez pas supprimer un
$ (document) .Ready () code> gestionnaire avec un engourdi car ils sont stockés différemment.
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: tous les appels vers $ (document) .Ready code> sera maintenant ignoré. Vous pouvez remplacer ce comportement en passant true comme deuxième argument:
$ (document) .Ready (fn, true) code> p> p> p>
Il est possible de définir plus d'une fonction code> prêt code>, donc je ne suis pas surpris que
Unbind code> ne fonctionne pas. Une solution hacky serait de définir une variable globale et de tout emballier à l'intérieur de la fonction code> code> dans un
si code> pour tester la valeur - il suffit de modifier la valeur et tandis que le
La fonction code> sera toujours exécutée, son contenu ne sera pas ...