Custom call jQuery ready

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

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

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

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

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

  • admin

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

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

  • admin

    @CharnaD:
    именно 🙂

  • Izhic

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

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

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

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

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

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

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

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

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