Почему YUI Menu ожидает загрузки изображений моей страницы?

Редактировать: это подтвержденная ошибка в jQuery 1.3.1. Это исправлено в jQuery 1.3.2.


У меня есть элемент управления меню YUI в точности как этот образец с подменю в верхней части.

Я попытался использовать код Yahoo для инициализации меню:

YAHOO.util.Event.onContentReady("mnuTopNav", function() {

    var oMenuBar = new YAHOO.widget.MenuBar("mnuTopNav", {
        autosubmenudisplay: true,
        hidedelay: 750,
        lazyload: true
    });

    oMenuBar.render();
});

Я вижу проблемы со страницами, на которых есть изображения, для загрузки которых требуется время.

Я заметил, что заголовки будут появляться сразу (Связь / Покупки / Развлечения), но маленькие стрелки, указывающие на наличие подпунктов, не появятся, пока не будут загружены все изображения.

Я думал, что это очень странно. Я даже попытался переключить код на JQuery, чтобы посмотреть, будет ли инициализироваться до загрузки изображений (вот что $(function() я думал, что должен был сделать).

$(function(){


        var oMenuBar = new YAHOO.widget.MenuBar("mnuTopNav", {
            autosubmenudisplay: true,
            hidedelay: 750,
            lazyload: true
        });

        oMenuBar.render();
});

К моему изумлению, у меня осталась та же проблема. Меню не будет инициализироваться, пока не будет загружена вся страница.

Это определенно изображения, которые ждут.

Примечание: эта проблема только в Internet Explorer. Firefox, кажется, вызывает это событие onContentReady ПЕРЕД загрузкой изображений.

Могу ли я обойти эту проблему?


Редактировать: это подтвержденная ошибка в jQuery 1.3.1. Это исправлено в jQuery 1.3.2.

3 ответа

Решение

Кажется, что Yahoo onContentReady(...) по какой-то причине ожидает загрузки изображений, поэтому я перестал использовать это.

Кроме того, похоже, что в JQuery есть ошибка как $(function() { }); работает

Посмотрите этот пост мной, пытаясь получить более подробную информацию по этому вопросу.

Вы пытались использовать YUI onAvailable() вместо onContentReady()? Из документов YUI:

Метод onContentReady имеет идентичный синтаксис с onAvailable. Существенное различие между этими двумя методами заключается в том, что onContentReady ожидает, пока целевой элемент и его nextSibling в DOM не ответят на getElementById. Это гарантирует, что содержимое целевого элемента будет загружено полностью (за исключением любого динамического содержимого, которое вы можете добавить позже через скрипт). Если onContentReady никогда не обнаруживает nextSibling, он запускается с событием window.load.

Я предполагаю, что браузер должен загрузить изображения в DOM до того, как сработает атрибут nextSibling, поэтому onContentReady () ожидает этого.

Для jQuery вы должны сделать это:

    $(document).ready(function(){


        var oMenuBar = new YAHOO.widget.MenuBar("mnuTopNav", {
            autosubmenudisplay: true,
            hidedelay: 750,
            lazyload: true
        });

        oMenuBar.render();
   });
Другие вопросы по тегам