7 votes

Effacer un appel jquery document.ready()

Comment effacer les fonctions anonymes qui sont configurées pour se déclencher via une commande jQuery ? document.ready() appeler ?

Par exemple :

<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>

L'alerte se produit quelles que soient mes tentatives pour la contourner. Existe-t-il un moyen d'y remédier ?

6voto

jfriend00 Points 152127

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

jQuery ne dispose pas d'un moyen publiquement documenté pour annuler ou bloquer les gestionnaires document.ready(). Si vous contrôlez le code, vous pouvez utiliser une variable globale et une conditionnelle comme celle-ci :

var skipReady = false;
$(document).ready(function ()
{
    if (!skipReady) {
        alert('ready');
    }
});

// skip the document.ready code, if it hasn't already fired
skipReady = true;

Ou, si vous voulez pirater un peu jQuery (au-delà des interfaces documentées), vous pouvez faire ceci :

$(document).ready(function() {
    alert("ready");
});

// stop the ready handler
$.isReady = true;

Vous pouvez voir ce dernier travailler ici : http://jsfiddle.net/jfriend00/ZjH2k/ . Cela fonctionne parce que jQuery utilise la propriété : $.isReady pour savoir s'il a déjà déclenché les gestionnaires ready ou non. En lui donnant la valeur true, il pense qu'il les a déjà activés et ne le fera pas à chaque fois.

1voto

gilly3 Points 33285

Ça marche :

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

Il me semble qu'il s'agit d'un bogue - tous les autres événements de jQuery peuvent être déliés. Omettre celui-ci est incohérent.

Ce n'est pas une réponse directe à l'omission, mais voici des informations connexes provenant de Documents sur jQuery :

Les trois syntaxes suivantes sont équivalentes :

  • $(document).ready(handler)
  • $().ready(handler) (ce n'est pas recommandé)
  • $(handler)

Il y a également $(document).bind("ready", handler) . Cette méthode se comporte de la même manière que la méthode ready, à une exception près : Si l'événement ready a déjà été déclenché et que vous essayez de .bind("ready") le gestionnaire lié ne sera pas exécuté. Les gestionnaires prêts liés de cette façon sont exécutés après ceux liés par les trois autres méthodes ci-dessus.

0voto

Justin Lucas Points 1826

$(document).ready() dépend de l'événement onLoad qui est déclenché par le navigateur, ce qui signifie que vous ne pouvez pas l'empêcher de se produire. Si la fonction alert() est déterminée par une condition, j'utiliserais une instruction if/else pour décider si elle est appelée.

0voto

blask Points 403

Super vieille question, mais j'ai eu besoin de le faire récemment pour empêcher le code document.ready que je ne contrôlais pas de s'exécuter dans certaines instances. Cela peut être réalisé en utilisant la fonction ready de jQuery comme mandataire, un peu comme un espion de test. La méthode suivante fonctionnera :

var ready = $.prototype.ready;

// proxy the ready function
$.prototype.ready = function ( fn, allowed ) {
    allowed = allowed || false;

    if ( allowed ) {
        ready.call( this, fn );
    }
};

Tous les appels à $( document ).ready seront désormais ignorés. Vous pouvez outrepasser ce comportement en passant true comme second argument : $( document ).ready( fn, true )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X