Почему 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.

Ответ 1

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

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

Смотрите этот пост, пытаясь получить больше подробностей о проблеме.

Ответ 2

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

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

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

Ответ 3

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

    $(document).ready(function(){


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

        oMenuBar.render();
   });