Custom call jQuery ready > Snowcore’s блог

Custom call jQuery ready

В приложениях которые используют jQuery framework, обработчики событий практически всегда задаются так:

$(document).ready(function(){
  // do something…
});

Т.е. все действия будут выполнятся после полной загрузки документа. Но если у нас на странице единственный компонент javascript, использование которого не требует полной загрузки страницы? В данной ситуации можно задавать обработчик как только будет загружен javascript компонент (а не весь документ). Рассмотрим на примере: у нас есть компонент “часы” - для работы которого нужен элемент div. В данном случае javascript действия можно выполнять уже после загрузки элемента div с id=”clock”, например:

$(‘#clock’).ready(function(){
  // init clock
});

Все предельно просто, но а если у нас много javascript компонентов?
С данной проблемой я столкнулся на работе: вся страница грузится с нормальной скоростью, а баннеры загружаются в последнюю очередь. При чем этот процесс занимает слишком много времени. Получается, что используя обработчик вида $(document).ready(function(){…}); javascript ожидает загрузки всех баннеров. И в это время страница, состоящая из ajax элементов, находится в неработоспособном состоянии. Но, к счастью, jQuery позволяет вызвать ready вручную (jQuery ready manual call):

Данный метод сообщает о том, что документ был загружен. Таким образом можно использовать стандартный обработчик $(document).ready(function(){…});
Проблема была решена следующим образом: в главный layout шаблон, делается javascript вставка перед закрывающимся тегом body:

<script type=“text/javascript”>
 jQuery.ready();
</script>

6 Responses

  1. Gennady Says:

    Вы ничего не путаете насчет $(document).ready(function(){ });
    Эта конструкция отслеживает момент готовности DOM к манипуляциям, а вовсе не полную загрузку документа.
    Оф.документация: http://docs.jquery.com/Events/ready

  2. admin Says:

    Именно это я и имел ввиду :) Спасибо за поправку!

  3. CharnaD Says:

    То есть попросту jQuery.ready() провоцирует запуск $(document).ready?

  4. admin Says:

    @CharnaD:
    именно :)

  5. Izhic Says:

    Мне не помогает ((

    Дело в следующем:

    Я для class делаю обработку

    $(document).ready(function(){ $(”input.tagz”).click(function(){
    alert(”GGGG”);
    });
    });

    И для сразу загруженных эл-ов, ещё както работает
    //только в IE :(

    А для AJAX подгруженных эл-ов, вообще глухо.

    Хотел воспользоваться вашим советом и добавил в
    Ajax.Request при правильном выполнении
    $(document).ready();

    однакож….
    что надо изменить? скажите пожалуйста…

  6. Needge Says:

    @Izhic:
    1) Для AJAX подгруженных эл-ов обработчики событий нужно задавать заново - т.к. старый вызов $(”input.tagz”).click(function(){… не влияет на новые элементы в DOM
    2) “Хотел воспользоваться вашим советом и добавил $(document).ready()”- вы неправильно написали, нужно jQuery.ready()

Оставить комментарий

I'm not spammer :)

Внимание: Комментарии проходят ручную модерацию