Shadowbox не открывается последовательно в IE и FF

Я создаю список ссылок в Javascript, которые должны открываться в теневой коробке. Изначально при загрузке любой страницы (например, Ctrl-F5) ссылка открывается в окне, а не в теневой панели. Если я смогу каким-то образом заставить его открыться в теневой коробке, благодаря удаче или случайному стечению обстоятельств, он будет работать до тех пор, пока страница не будет перезагружена снова.

Вот разметка на странице:

<div id="portAgreementList">
    <ul id="blAgreements"></ul>
</div>

Вот javascript, который делает ссылки в blAgreements:

function (data, status)
{
    if (status == 'success')
    {
        if (data == '')
        {
            alert('URL returned no data.\r\n' +
                'URL: ' + url);
            return;
        }
        var jsonObj = StringToJSON(data); // StringToJSON function defined in /js/utilities.js

        if (!jsonObj) { return; }
        var items = '';

        if ( jsonObj.items.length > 0 ) {
            for (var xx = 0; xx < jsonObj.items.length; xx++) {
                items += '<li><a rel="shadowbox;width=750;height=450;" href="' + jsonObj.items[xx].Url +'">' + 
                jsonObj.items[xx].Text +'</a></li>';
            }
        }
        else {
            items = '<li>You have no port agreements on file for this company.</li>';
        }
        $('#blAgreements').html(items);
        Shadowbox.init();
    }
}

Я звоню в Shadowbox.init(); после того, как я добавил создание элементов списка, и иногда это работает. Я хотел бы понять, почему это непоследовательно и как мне сделать его более надежным.

Обновление №1: похоже, это состояние гонки. Если я загружу страницу, по крайней мере, в IE, и подожду, прежде чем щелкнуть, она в конечном итоге сработает. С IE8 мне приходится ждать около 3 секунд. FF, похоже, не следует такому поведению.

Обновление №2. В FF, если я нажимаю на ссылку после загрузки страницы, открывается URL-адрес, как и на любой другой веб-странице. Нажмите кнопку «Назад» и снова щелкните ссылку, и URL-адрес откроется в теневом окне.


person amber    schedule 03.02.2011    source источник


Ответы (1)


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

function (data, status)
{
    if (status == 'success')
    {
        if (data == '')
        {
            alert('URL returned no data.\r\n' +
                'URL: ' + url);
            return;
        }
        var jsonObj = StringToJSON(data); // StringToJSON function defined in /js/utilities.js

        if (!jsonObj) { return; }
        var items = '';

        if ( jsonObj.items.length > 0 ) {
            for (var xx = 0; xx < jsonObj.items.length; xx++) {
                var li = $('<li></li>').appendTo('#blAgreements');
                var anchor = $('<a rel="shadowbox;width=750;height=450;" href="' + jsonObj.items[xx].Url +'">' + 
                jsonObj.items[xx].Text +'</a>').appendTo(li);
                Shadowbox.setup($(anchor), null);
            }
        }
        else {
            items = '<li>You have no port agreements on file for this company.</li>';
        }
    }
}

Ключевое отличие состоит в том, что я строю DOM как элементы.

var li = $('<li></li>').appendTo('#blAgreements');
var anchor = $('<a rel="shadowbox;width=750;height=450;" href="' + jsonObj.items[xx].Url +'">' + jsonObj.items[xx].Text +'</a>').appendTo(li);

А потом звонит:

Shadowbox.setup($(anchor), null);

На якоре.

person amber    schedule 03.02.2011