JQuery и JScrollPane и AJAX - PullRequest
       6

JQuery и JScrollPane и AJAX

1 голос
/ 11 февраля 2011

Я создаю сайт, на котором довольно много AJAX, и мне кажется, что я столкнулся с некоторым препятствием, заставив jScrollPane работать на меня.

Это может быть сложно записать.

У меня есть главная страница, и в ее основе у меня есть div, который я использую для записи всех своих оверлеев или лайтбексов.например,

<body>
<a href="#" onclick="$('#popup').load('some-url.php');return false;">content etc</a>
<div id="popup"></div>
</body>

Затем в одном из таких оверлеев (some-url.php) у меня есть больше контента, а затем у меня есть еще несколько div, которые заполняются с помощью ajax.

some-url.php

<body>
<div id="left"></div>
<div id="right"></div>
<script>
$('#left').load('another-url.php');
</script>
</body>

Теперь допустим, что div id = "left". Я хочу, чтобы на нем был скроллер jScrollPane, но содержимое загружалось через ajax.

То, что я пробовал, находится в другом URL-адресе..php 'загружает весь мой контент и затем пытается добавить область прокрутки.

' another-url.php '

<div class="wrapper>
// iterate through my DB and gets lots of content
</div>
<script>
$('#left').jScrollPane();
</script>

Это не удается, он говорит, что $ (' # left ') .jScrollPane ();это не функция, поэтому я попытался поместить ее в первый оверлей после загрузки содержимого div.

<body>
<div id="left"></div>
<div id="right"></div>
<script>
$('#left').load('another-url.php');
$('#left').jScrollPane();
</script>
</body>

Это не дает сбой в первый раз, хотя у меня нет скроллера ... ноесли я перезагружу его снова, он снова не сможет сказать, что $ ('# left'). jScrollPane ();это не функция.

Поэтому я посмотрел документы и попытался использовать пример с динамическим контентом.

<body>
<div id="left"></div>
<div id="right"></div>
<script>
var api = $('#left').jScrollPane().data('jsp');
('a.some-link').bind(
'click',
function(){
api.getContentPane.load(
'another-url.php',
function(){
api.reinitialise();
}
);
}
);
</script>
</body>

Но на этот раз он снова говорит, что $ ('# left'). jScrollPane();это не функция. Также, когда я получаю одну из этих ошибок, другая jScrollPane на сайте, которая не является ajax, внезапно перестает работать, пока я не перезагружаю страницу, так что jScrollPane, очевидно, как-то получает дерьмо со мной ...

Я надеюсь, что парень, который создал библиотеку, может зависнуть здесь и ответить.

1 Ответ

0 голосов
/ 21 мая 2011

Я думаю, вам нужно установить jScrollPane () на запуск после загрузки содержимого.Если я не ошибаюсь, метод загрузки является асинхронным, и ваш jscrollpane() сработает, прежде чем содержимое будет загружено в HTML-купол $("#left").Это означает, что он действительно недоступен при запуске jscrollpane.попробуйте использовать $.ajaxSetup({ascync:false}); и посмотрите, поможет ли это.Возможно, вам придется использовать метод $.get, если $.ajaxSetup не работает для метода загрузки.

IE:

$.ajaxSetup({async:false});
$('#left').load('another-url.php');
$('#left').jScrollPane();

, если ajaxSetup не работает с нагрузкойметод попробуйте использовать метод .get

 $.ajaxSetup({async:false});
    var $jqxhr = $.get('another-url.php');
    $jqxhr.success(function(responseText,statusText,jqxhr){
      $('#left').html(responseText);
    });
    $jqxhr.complete(function(){
      $('#left').jScrollPane();
    });
    $jqxhr.error(function(){alert("error loading content");});

Надеюсь, это поможет.Работал на меня.У меня была похожая проблема.

...