jquery - 处理 "Wait, Load, and then Show"内容的更好方法

标签 jquery load

我有一个在点击时通过 $.load() 方法填充的 div 。然后,我将此 div 作为弹出窗口附加到 body 上(有点像模态弹出窗口)。每次单击时,div 的内容都会更改。

问题

整个填充机制恰好需要大约 1.5 到 2 秒。我只要点击一次就没有问题。但是,如果我再次单击,div 会弹出旧内容,然后在接下来的 500 毫秒左右加载新内容。因此用户可以同时看到我想避免的旧内容和新内容。

我尝试过的

(1) 首先想到的是使用 setTimeout() 函数在 2 秒后运行。

$('div#temp').load('somepage.php');
setTimeout(function(){
   html = $('div#temp').html();
}, 2000);
$('div#popup').html(html).appendTo('body');

这可以工作,但不可靠。不保证新内容会在 2 秒内加载。也可能需要 3 秒或更长时间。对超过 2 秒的值进行硬编码也不好,因为它看起来像是永恒的。

(2) 我尝试的下一件事是通过使用以下内容来使用 while 循环:

var html = '';
$('div#temp').load('somepage.php');
html = $('div#temp').html();
while(html == '')
{
  html = $('div#temp').html();
}
$('div#popup').html(html).appendTo('body');

最终,这可行,但由于某种原因,它在弹出 div 之前使浏览器挂起 8-10 秒

很明显,这两种替代方案都有一些缺点。我希望可能有其他我不知道的方法来解决这个问题?

最佳答案

您是否尝试过使用 $.load 的完整回调?
.load( url [, data ] [,complete(responseText, textStatus, XMLHttpRequest) ] )

$('div#temp').load('somepage.php',function(responseText){
     $('div#popup').html(responseText).appendTo('body');
 });

如果旧内容仍然在新内容之前显示,您可以先隐藏旧内容。那么你就不需要一个临时 div 来存储数据。

$('div#popup').fadeOut(function(){
     $('div#popup').load('somepage.php',function(){
     $(this).fadeIn();
 });
});

关于jquery - 处理 "Wait, Load, and then Show"内容的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15971943/

相关文章:

javascript - jquery 第一次尝试时没有捕获文本框的值

javascript - 通过选中/取消选中一个复选框来选中/取消选中多个复选框

javascript - 如何确定谷歌翻译已加载?

jquery - 如何将事件添加到同一字段的多个字段

jquery - 改变 url 的滑动页面...这怎么可能?

jQuery Autocomplete - 缓存不再是一种选择吗?

javascript - 如何在 iframe 完全加载之前显示加载图标?

java - 如何在小程序和桌面应用程序中一致地加载资源?

jquery加载部分页面,通过变量ID选择

javascript - 页面完全加载后执行某些操作