2009-09-12 2 views
1

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

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/


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

ответ

2

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

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

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

// 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); 
    }; 

}; 

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

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

Смежные вопросы