1

在网站上工作时,我有一个内容区域部门,我想根据单击的图像更新其内容。现在,我有一个在内容区域中使用的自定义滚动条。现在,起初我为 onclick 脚本函数编写了以下代码段:

function xyz(){
    $("#content-area").load("abc.php");
    $("#content-area").mCustomScrollbar({scrollButtons:{enable:true}});
}

但是脚本的第二行没有响应,即我没有得到滚动条。相反,当我使用这段代码片段时,它起作用了:

$.post("abc.php", function(data){
   $("#content-area").html(data);
   $("#content-area").mCustomScrollbar({scrollButtons:{enable:true}});
});

我想知道 $.post() 的功能以及为什么第一个片段不起作用而第二个片段起作用?

4

3 回答 3

3

在发送mCustomScrollbarAJAX 请求后立即执行的第一种情况:请记住,AJAX 中的 first 是 for 。但它显然还没有什么可做的,因为服务器的响应还没有出现。Aasynchronous

在第二个片段中,mCustomScrollbar小部件的创建发生在收到AJAX 请求的响应之后(因为此行$.post现在是成功处理程序的一部分)并且#content-area填充了必要的结构 (with .html()) 调用。所以现在它可以正常工作了。

您可以使用这样一个事实,$.load即可以为方法提供自定义回调函数,该函数将在请求完成时执行,如此所述。例如:

$("#content-area").load("abc.php", function() {
     $(this).mCustomScrollbar({scrollButtons:{enable:true}});
});

注意$(this)用法:this在回调函数中依次设置为每个 DOM 元素,您无需再次遍历 DOM 寻找它content-area;只需将该元素包装到 jQuery 对象中就足够了。

于 2012-12-25T18:14:40.807 回答
1

您需要使用请求完成时执行的回调函数:

$("#content-area").load("abc.php", function(){
     $(this).mCustomScrollbar({scrollButtons:{enable:true}});
});
于 2012-12-25T18:16:10.597 回答
0

我想在第一个示例中,第二个语句是在函数完成之前执行的.load()。在第二个中,您正确使用了成功功能,该功能仅在 POST 请求完成后执行。

于 2012-12-25T18:13:52.613 回答