Аналог jQuery.ready() в Prototype.js
Рубрика: JavaScript/Ajax | 10 June 2008, 23:55 |
Vadim Voituk
Недавно впервые удалось попробовать использовать JavaScript-библиотеку jQuery.
Из того, что понравилось сразу – это возможность выполнять JavaScript-код не по событию полной загрузки страницы (window.onLoad), а сразу после загрузки и инициализации DOM-дерева. Т.е. можно уже выполнять манипуляции с DOM-деревом не дожидаясь загрузки стилей, изображений и остальных медиа-компонентов.
В jQuery реализуется это 2-мя способами:
$(document).ready(function(){...})
и в сокращенной нотации
$((function(){...})
Но так как я являюсь давним пользователем prototype.js – сразу же захотелось такую же возможность и в нем. Как оказалось в версии 1.6 она уже есть, и использовать её можно таким образом:
document.observe('dom:loaded', function(){ ... })
или
Event.observe(document, 'dom:loaded', function(){ ... })
Работоспособность проверял на Prototype 1.6.0.2 в Firefox3, Internet Explorer 6 и Safari (Win+Mac).
Tweet
Бояним потихоньку? :)))
Кому баян, а кому после 3х лет системного и мобильного программирования – новые откровения.
прикольно вчера прочитал а сегодня как раз такая штука понадобилась))
а есть ли в прототипе аналог prepend функции жквери?
Alex, есть конечно же.
[javascript]new Insertion.Top()[/javascript]
спасибо :) по возможности “баянь” еще в этом направлении))
а то доков по прототипу хороших мало, гугл так и не понял что я от него хочу запрашивая “prototype js prepend like jquery” и другие вариации на тему :)
А может вы знаете что делать если содержимое грузится xmlhttprequest’ом? В таком случае событие dom:loaded не срабатывает, а передавать флажки “ajax/не ajax” очень не хочется.
evalScripts: true само собой сделал.
Если содержимое подгружается xmlhttprequest’ом? То никак.
По хорошему надо передавать JavaScript-код отдельно от HTML и выполнять уже после завершения запроса.
для 1.5:
Event.observe(window, ‘load’, function() {});
@JuJulka,
Неправильно, т.к. в данном случае вызов произойдет после загрузки всей страницы полностью. А в мое случае, после формирования DOM-дерева.
согласна,
Vadim Voituk, скажите это разработчикам 1.5:))
ибо
document.observe(‘dom:loaded’, function(){ … })
Event.observe(document, ‘dom:loaded’, function(){ … })
возвращают “is not a function” для 1.5
@JuJulka
В таком случае стоит констатировать что 1.5 попросту не поддерживает такой функционал.
BTW: Prototype 1.5 – это какое-то архаичное чудище. Как по возможностям так и по производительности.
Все нормально работает, в такой вот конструкции:
window.onload = init;
function init() {
тело функции
}