Загрузите Javascript и выполните его - PullRequest
1 голос
/ 13 сентября 2009

У меня есть веб-сайт, который загружается один раз, а затем каждый раз, когда пользователь нажимает кнопку вместо загрузки новой страницы, содержимое просто заменяется на ajax. Однако на одной из страниц я использую jquery-ui и, например, если я попадаю в «index.html» и затем нажимаю, чтобы перейти на эту страницу, скрипт не загружается, но если я перехожу непосредственно на эту страницу, скрипт загрузить правильно. Я попытался обусловить загрузку скрипта, выполнив.

    var hash = window.location.hash.substr(1);
    var a = window.location.href.lastIndexOf("dev.html");
    var b = window.location.href.lastIndexOf(".html");
    var l = window.location.href.substring(a,b);

    $(document).bind('ready',function(){

            if((hash == "dev") || ((l == "dev") && (hash != dev)) || (l == hash)){
                //$('#tabs').html("<script type=\"text\/javascript\" src=\"assets\/js\/tabs-ui-init.js\"\/><\/script>");
$.ajax({
           type: "GET",
           url: "assets/js/tabs-ui-init.js",
           dataType: "script"
         });

            }
    });

Но скрипт все равно не загрузится ... что я делаю не так? Я пытался загрузить его с помощью $ .getScript () и другими способами, например, вместо .bind, используя .live и привязку для загрузки и выгрузки, но безуспешно ... способ загрузки этого сайта описан здесь: http://nettuts.com/javascript-ajax/how-to-load-in-and-animate-content-with-jquery/


Редактировать @ Джим Дэвис: Я думаю, что это именно то, что мне нужно, просто почему он не работает? Я сделал ссылку на Контент как на скрипты, которые он будет загружать, а Panel - это разделение, где размещать эти скрипты, пока код не запускается при загрузке страницы = /

1 Ответ

2 голосов
/ 13 сентября 2009

Есть две вещи в этом отношении, которые укусили меня в прошлом.

Самым простым является то, что в IE (по крайней мере, 6, возможно, не 8) есть странная ошибка, при которой теги типа скрипт / стиль / ссылка должны появляться ПОСЛЕ отображаемого содержимого (я думаю, что IE нужно что-то отображать - что-нибудь - чтобы "инициализировать" модель документа). Два года назад я выдернул свои волосы в течение двух дней на проекте ... наконец-то понял, что, если я просто переместил теги стиля и сценария внизу страницы, все бы сработало.

При загрузке содержимого скрипт иногда никогда не инициализируется должным образом - однако вы можете принудительно его запустить. В моей абстракции PanelManager есть функция:

    // Load Content
Panel.load = function(Content) {

        // "null" the old (to clear it)
    Panel.innerHTML = null;

        // Load the content
    Panel.innerHTML = Content;

        // Load Scripts
    var AllScripts = Panel.getElementsByTagName("script");
    var AllScriptsCnt = AllScripts.length;
    for (var Cnt = 0; Cnt < AllScriptsCnt; Cnt++){
        var CurScript = document.createElement('script');
        CurScript.type = "text/javascript";
        CurScript.text = AllScripts[Cnt].text;
        Panel.appendChild(CurScript);
    };

};

Посмотрите на раздел «Загрузка сценариев» - он сканирует новое содержимое на наличие тегов «script», а затем принудительно создает элементы сценария с тем же содержимым - для меня это удовольствие. (Обратите внимание, что в этом контексте «Панель» - это просто ссылка на элемент - обычно это DIV, содержащий новое содержимое.)

Надеюсь, это поможет.

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