1

我正在构建一个网站,上面有相当多的 ajax,我似乎在让 jScrollPane 为我工作时遇到了一些障碍。

这可能很难写下来。

我有一个主页,在它的底部我有一个 div,我用它来写我所有的叠加层或“lightbxes”。例如

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

然后在一个这样的覆盖(some-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="left" 我想要一个 jScrollPane 滚动条,但它是通过 ajax 加载的内容。

我尝试的是在“another-url.php”中加载我的所有内容,然后尝试添加滚动窗格。

'另一个 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(); 不是一个函数。此外,当我遇到其中一个错误时,网站上的另一个不是 ajax 的 jScrollPane 也会突然停止工作,直到我重新加载页面,所以很明显 jScrollPane 不知何故和我在一起......

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

4

1 回答 1

0

我认为您需要在加载内容后将 jScrollPane() 设置为触发。如果我没记错的话,加载方法是异步的,您jscrollpane()将在内容加载到 html dome 之前触发$("#left")。这意味着当 jscrollpane 被触发时它真的不可用。尝试使用$.ajaxSetup({ascync:false});,看看是否有帮助。$.get如果$.ajaxSetup对 load 方法不起作用,您可能必须使用方法。

IE:

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

如果 ajaxSetup 不适用于 load 方法,请尝试使用 .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");});

希望能帮助到你。为我工作。我有一个类似的问题。

于 2011-05-21T04:56:23.087 回答