Очистка вызова jquery document.ready () - PullRequest
7 голосов
/ 19 октября 2011

Как убрать анонимные функции, которые настроены на запуск с помощью вызова jquery document.ready ()?

Например:

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

5 голосов
/ 19 октября 2011

Вы, вероятно, получили бы наиболее подходящий ответ, если бы описали, какую проблему вы действительно пытаетесь решить.

jQuery не имеет публично документированного способа отменить или заблокировать обработчики document.ready ().Если вы управляете кодом, вы можете использовать глобальную переменную и условное выражение, например:

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

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

Или, если вы хотите немного взломать jQuery (помимо документированных интерфейсов), вы можете сделать это:

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

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

Вы можете увидеть эту последнюю работу здесь: http://jsfiddle.net/jfriend00/ZjH2k/. Это работает, потому что jQuery использует свойство: $.isReady, чтобы отслеживать, уже запущены ли обработчики готовности или нет.Установка его в true заставляет его думать, что он уже уволил их, поэтому он не будет делать это снова.

1 голос
/ 19 октября 2011

Это работает:

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

Для меня это похоже на ошибку - все остальные события в jQuery могут быть связаны. Пропускать это противоречиво.

Не прямой ответ по поводу упущения, но вот некоторая связанная информация от jQuery docs :

Все три следующих синтаксиса эквивалентны:

  • $(document).ready(handler)
  • $().ready(handler) (это не рекомендуется)
  • $(handler)

Существует также $(document).bind("ready", handler). Это ведет себя подобно методу ready, но с одним исключением: если событие ready уже сработало, и вы пытаетесь .bind("ready"), связанный обработчик не будет выполнен. Готовые обработчики, связанные таким образом, выполняются после любой связанной с другими тремя методами выше.

0 голосов
/ 21 марта 2017

Очень старый вопрос, но недавно я столкнулся с необходимостью сделать это, чтобы предотвратить запуск кода document.ready в некоторых случаях, который я не контролировал.Этого можно достичь, передав прокси функцию готовности jQuery, скорее как тестовый шпион.Будет работать следующее:

var ready = $.prototype.ready;

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

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

Все вызовы на $( document ).ready теперь будут игнорироваться.Вы можете переопределить это поведение, передав true в качестве второго аргумента: $( document ).ready( fn, true )

0 голосов
/ 19 октября 2011

$ (document) .ready () зависит от события onLoad, которое запускается браузером, что означает, что вы не можете предотвратить его. Если alert () определяется каким-либо условием, я бы использовал оператор if / else, чтобы решить, вызывается ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...