jQuery .load () не загружает плагины - PullRequest
1 голос
/ 04 марта 2010

У меня есть главная страница с 2 ссылками, которые загружают внешние файлы через .load (). Первый файл имеет простой JavaScript-ролловер, который работает при загрузке контента. Второй файл имеет плагин jQuery, который не работает при загрузке с помощью .load () - но отлично работает, когда файл данных просматривается сам по себе.

Основной файл: http://gator1105.hostgator.com/~carc/test-load.html

Второй файл данных, который работает сам по себе, но не из .load (): (тот же URL, что и выше, но файл test-load-two.html - StackOverflow позволит мне создать только 1 гиперссылку) Вместо того чтобы вставлять мой исходный код сюда, вы можете просто просмотреть его на самих страницах.

Как заставить работать второй файл со слайд-шоу при загрузке с помощью .load ()?

Ответы [ 5 ]

2 голосов
/ 24 июня 2010

Я сделал что-то похожее с сайтом, над которым я работаю. Что вы хотите сделать, это сделать функцию обратного вызова для каждой страницы для вызова $ .load () на главной странице.

См. Следующий код из документации jquery.load () :

$('#result').load('ajax/test.html', function() {
  alert('Load was performed.');
});

В вашем конкретном случае вы бы хотели что-то подобное на главной странице test-load.html.

$(document).ready(
    function(){ 
    $('li').click(function(){ 
        var showThisContent = this.id;
        $('#content').load('test-load-'+showThisContent+'.html', function(){
              if (showThisContent == "one"){
                  //Do logic for test-load-one.html

                  //Pre-load your images here.

                  //You may have to assign a class to your anchor tag
                  //and do something like:
                  $('a.assignedClass').mouseover(function(){});
                  $('a.assignedClass').mouseout(function(){});
              } //end if
              if (showThisContent =="two"){
                  //Do logic for test-load-two.html here
                  $('.slideshow').cycle({
                      fx: 'fade',
                      speed: 500,
                      timeout: 0,
                      next: '.nextSSimg',
                      prev: '.prevSSimg',
                      pager: '#SSnav',
                      cleartype:  true,
                      cleartypeNoBg:  true
                  }); //end .cycle()
               } //end if
            ); //end .load(location, callback function())
    }); //end $('li).click()
}); //end $(document).ready()

Теперь, очевидно, я не конвертировал весь ваш код, но здесь происходит следующее: после завершения document.ready будет запущена функция обратного вызова, и теперь такие элементы, как .slideshow, теперь загружаются в DOM, Ваш код обратного вызова будет привязан к ним соответствующим образом.

Вы можете переключить этот код несколькими способами, чтобы получить один и тот же результат (то есть, обернуть 2 $ .load () в условия вместо выполнения условной логики в обратном вызове .load, и / или поместить callbackOne () и callbackTwo () работает над document.ready, а затем вызывает их соответствующим образом), но это ваше предпочтение. Вы должны иметь возможность делать то, что хотите, используя аргумент функции обратного вызова $ .load ().

0 голосов
/ 27 июля 2010

Не идите на $.load. Попробуйте вместо этого $.get, что может показаться менее удобным, но у меня это сработало в другом случае. Пример кода, как показано ниже.

$(li).click(function() {
   // your code for finding the id
   $.get('test-load-' + id + '.html', function(responseHtml){
       $('div#content-area').empty().append($(responseHtml)); // remove all elements from #content-area
       // $('...').html(responseHtml) will not work
   });
});

Надеюсь, это решит вашу проблему.

0 голосов
/ 04 марта 2010

Это потому, что .load просто загружает и устанавливает HTML в элемент, который вы говорите, а тег script находится вне всего этого

0 голосов
/ 04 марта 2010

Хорошо, вот лучший ответ: по причинам, которые я не понимаю, когда вы загружаете фрагмент (или целую страницу; независимо от того) с помощью jQuery, используя специальный трюк «селектор», чтобы вынуть только часть документа:

var showThisContent = this.id;
$('#content').load('test-load-' + showThisContent + '.html #content-area');

библиотека jQuery полностью удаляет сценарии из содержимого и никогда не запускает их. Зачем? Я не знаю.

Я знаю, что вы, вероятно, больше мне не доверяете, но вот что я сделал с вашим исходным кодом: я взял этот второй файл (test-load-two) и удалил голову и все такое; в основном я сделал это фрагмент, содержащий только «области содержимого». (Я также избавился от тега script, который загружает jquery, так как он вам на самом деле не нужен, поскольку на внешней странице он уже есть.) Затем я изменил главную страницу (test-load), чтобы при вызове «загрузить» ее просто передает URL без этого селектора '# content-area'. Это работает.

[править] Я только что опубликовал вопрос на форуме jQuery: http://forum.jquery.com/topic/the-load-function-and-script-blocks

0 голосов
/ 04 марта 2010

Игнорировать этот ответ

Ваш второй файл инициализируется в блоке «document.ready». Это не будет работать, когда ваш контент загружается через AJAX. Попробуйте извлечь код из второй страницы, которая находится внутри «document.ready», чтобы это был просто блок скрипта.

[править] О, я вижу - сценарий находится не только внутри блока «document.ready» (ну, это уже не так), но эта вторая страница представляет собой полный HTML-документ. Вы не можете загрузить полностью HTML-документ в середину другого документа; это не имеет смысла, и jQuery будет собирать только то, что находится в теле. Таким образом, попробуйте переместить ваш скрипт тега в тело и посмотреть, что произойдет. (Вы все еще не хотите «document.ready», я не думаю.)

[редактировать снова] на самом деле я забираю это назад - я не думаю, что jQuery ничего удаляет; Бьюсь об заклад, браузер запутался.

[редактировать еще раз] хорошо, хорошо, я вижу, что вы изменили это снова - позвольте мне взглянуть очень внимательно.

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