Аналог 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).

Комментариев: 13

13 Responses to “Аналог jQuery.ready() в Prototype.js”

Комментарии:

  1. FX Poster

    Бояним потихоньку? :)))

  2. Vadim Voituk

    Кому баян, а кому после 3х лет системного и мобильного программирования – новые откровения.

  3. alex

    прикольно вчера прочитал а сегодня как раз такая штука понадобилась))

    а есть ли в прототипе аналог prepend функции жквери?

  4. Vadim Voituk

    Alex, есть конечно же.
    [javascript]new Insertion.Top()[/javascript]

  5. alex

    спасибо :) по возможности “баянь” еще в этом направлении))

    а то доков по прототипу хороших мало, гугл так и не понял что я от него хочу запрашивая “prototype js prepend like jquery” и другие вариации на тему :)

  6. Max

    А может вы знаете что делать если содержимое грузится xmlhttprequest’ом? В таком случае событие dom:loaded не срабатывает, а передавать флажки “ajax/не ajax” очень не хочется.
    evalScripts: true само собой сделал.

  7. Vadim Voituk

    Если содержимое подгружается xmlhttprequest’ом? То никак.
    По хорошему надо передавать JavaScript-код отдельно от HTML и выполнять уже после завершения запроса.

  8. JuJulka

    для 1.5:
    Event.observe(window, ‘load’, function() {});

  9. Vadim Voituk

    @JuJulka,
    Неправильно, т.к. в данном случае вызов произойдет после загрузки всей страницы полностью. А в мое случае, после формирования DOM-дерева.

  10. JuJulka

    согласна,
    Vadim Voituk, скажите это разработчикам 1.5:))
    ибо
    document.observe(‘dom:loaded’, function(){ … })
    Event.observe(document, ‘dom:loaded’, function(){ … })
    возвращают “is not a function” для 1.5

  11. Vadim Voituk

    @JuJulka
    В таком случае стоит констатировать что 1.5 попросту не поддерживает такой функционал.
    BTW: Prototype 1.5 – это какое-то архаичное чудище. Как по возможностям так и по производительности.

  12. Gart

    Все нормально работает, в такой вот конструкции:

    window.onload = init;

    function init() {
    тело функции
    }

  13. vitaseg

    кросавчег. фреймвёрки в топку учите чистый js.

Leave a Reply