В приложениях которые используют 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>
Январь 13th, 2009 at 1:18 пп
Вы ничего не путаете насчет $(document).ready(function(){ });
Эта конструкция отслеживает момент готовности DOM к манипуляциям, а вовсе не полную загрузку документа.
Оф.документация: http://docs.jquery.com/Events/ready
Январь 13th, 2009 at 3:12 пп
Именно это я и имел ввиду :) Спасибо за поправку!
Январь 15th, 2009 at 9:50 дп
То есть попросту jQuery.ready() провоцирует запуск $(document).ready?
Январь 15th, 2009 at 10:01 дп
@CharnaD:
именно :)
Февраль 15th, 2009 at 2:57 дп
Мне не помогает ((
Дело в следующем:
Я для class делаю обработку
$(document).ready(function(){ $(”input.tagz”).click(function(){
alert(”GGGG”);
});
});
И для сразу загруженных эл-ов, ещё както работает
//только в IE :(
А для AJAX подгруженных эл-ов, вообще глухо.
Хотел воспользоваться вашим советом и добавил в
Ajax.Request при правильном выполнении
$(document).ready();
однакож….
что надо изменить? скажите пожалуйста…
Февраль 27th, 2009 at 12:43 пп
@Izhic:
1) Для AJAX подгруженных эл-ов обработчики событий нужно задавать заново - т.к. старый вызов $(”input.tagz”).click(function(){… не влияет на новые элементы в DOM
2) “Хотел воспользоваться вашим советом и добавил $(document).ready()”- вы неправильно написали, нужно jQuery.ready()