Инструменты jquery: вызов инициализации doc ready в скрипте, загруженном ajax - PullRequest
3 голосов
/ 15 марта 2011

У меня отлично работают вкладки на основе инструментов jquery, и на каждой вкладке я загружаю страницы, используя ajax. На одной из страниц есть инструменты от другой стороны, которая требует следующего кода, когда он будет готов:

$(function() { $('.scroll-pane').jScrollPane({showArrows: true}); });

Я точно уверен, куда поместить этот код (на странице, загруженной ajax). По словам Flowplayer, ребята:

"Тег script должен быть помещен ниже элементов HTML, а не внутри события document.ready (), поскольку это событие не запускается для страниц, загруженных с помощью AJAX."

Означает ли это инкапсулировать вышеприведенное в теги <script></script> и ставить после тега </html>? Это за пределами всего документа, так что это не кажется правильным ...

Помогите кому-нибудь ... где я должен поместить свой код инициализации в документ ajax?

Спасибо

Ответы [ 3 ]

0 голосов
/ 15 марта 2011

Это довольно далеко, но я уверен, что вы могли бы подключиться к событию onClick. Я считаю, это срабатывает после загрузки содержимого вкладки, даже через AJAX. Вы бы написали что-то вроде этого:

$("ul.tabs").tabs("div.panes > div", {
    effect: 'ajax',
    onClick: function(event, index) {
        $('.scroll-pane').jScrollPane({showArrows: true});
    }
});

Я надеюсь, что это работает для вас. Если это так, это строго недокументировано.

0 голосов
/ 06 апреля 2011

Если я правильно понимаю вашу проблему, то есть два способа ее исправить.

a) загрузить скрипт до загрузки с вкладки, поэтому вам не следует ждать загрузки скрипта

b) динамически загружать сценарии на главную страницу и вызывать обратный вызов

в случае b вы должны сделать вот так:

 function loadScript(sScriptSrc, oCallback) {
    var oHead = document.getElementById('head')[0];
    var oScript = document.createElement('script');
    oScript.type = 'text/javascript';
    oScript.src = sScriptSrc;
    // most browsers
    oScript.onload = oCallback;
    // IE 6 & 7
    oScript.onreadystatechange = function() {
        if (this.readyState == 'complete') {
            oCallback();
        }
    }
    oHead.appendChild(oScript);
}

Для меня это структурная проблема, а не проблема сценария. Это значит, КОГДА / КАК / ГДЕ вкладываются данные и скрипт вкладки при вызове ajax. Лучше будет, если вы поделитесь демонстрационной ссылкой, где это происходит. Я буду рад помочь.

Дайте мне знать, если я понимаю вашу проблему

0 голосов
/ 15 марта 2011

Запустите его как обратный вызов для загрузки AJAX. Таким образом, код будет запускаться после загрузки HTML в DOM.

$('#result').load('ajax/test.html', function() {
  $(function() { $('.scroll-pane').jScrollPane({showArrows: true}); });
});

Подробнее об API для load().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...