2011-02-11 121 views
1

我正在构建一个网站,它有一个公平的ajax位,我似乎有点让jScrollPane为我工作的障碍。jquery和jScrollPane和ajax

这可能很难记下来。

我有一个主页,在它的基础我有一个div,我用它来写所有覆盖或'lightbxes'。例如

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

然后在一个这样的叠加(一些-url.php)我有更多的内容,然后我再有更多的div它开始使用AJAX填充。

一些-url.php

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

现在让我们说DIV ID = “左边的” 我要上这一个JScrollPane滚动条,但它通过AJAX的内容加载。

我试过的是在'another-url.php'中加载了我的所有内容,然后尝试添加滚动条。

'另一-url.php'

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

此操作失败,它JScrollPane的()称,$( '#左')。不是一个函数,所以我尝试把它放入第一个覆盖图中,然后加载带有内容的div。

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

这不会失败的第一次,虽然我没有得到任何滚动...但如果我重装一遍失败再次说$(“#左”)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'd突然停止工作,直到我重新加载页面,所以显然jScrollPane得到狗屎与我不知何故...

我希望创建图书馆的人可能会在这里闲逛并回应。

回答

0

我认为你需要设置jScrollPane()在内容加载后触发。如果我没有弄错,加载方法是ascynchronous和你的内容被加载到html圆顶$("#left")之前将被触发。这意味着当jscrollpane被触发时它确实不可用。尝试使用$.ajaxSetup({ascync:false});,看看这是否会有所帮助。如果$.ajaxSetup不适用于加载方法,则可能必须使用$.get方法。

IE:

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

如果ajaxSetup不随负载的工作方法尝试使用。获得方法

$.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");}); 

希望它能帮助。为我工作。我有类似的问题。