Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery load()等待内容被加载_Jquery - Fatal编程技术网

Jquery load()等待内容被加载

Jquery load()等待内容被加载,jquery,Jquery,我想让网页平滑地彼此滑动。所以我赚了$('a')。点击();函数,用于检查链接是否为本地链接,以及是否为本地链接,并获取链接href并将其加载到正文中 $('a').click(function(){ var href=$(this).attr('href'); $('body').load(href); return false; }); 它看起来不错,但我的网站也包含了很多js插件。执行它们需要一段时间,.load操作首先显示“由js更改”内容,然后执行js。它

我想让网页平滑地彼此滑动。所以我赚了$('a')。点击();函数,用于检查链接是否为本地链接,以及是否为本地链接,并获取链接href并将其加载到正文中

$('a').click(function(){
    var href=$(this).attr('href');  
    $('body').load(href);
    return false;
});
它看起来不错,但我的网站也包含了很多js插件。执行它们需要一段时间,
.load
操作首先显示“由js更改”内容,然后执行js。它会导致内容的flickr不好

有没有可能通过执行JS来缓存新内容,在完成之前不要更改旧的正文,当所有的DOM和JS都在新内容上完成时,滑出旧内容并滑入新内容

编辑:我认为重点不是检测js执行,而是检查是否加载了所有其他文件-DOM更改应该在启动$(window)的同时启动。加载新文件将是错误的

[编辑]-------------------------------------------------------------

我的解决方案是css代码(css总是在生成dom之前加载),它的跨浏览器不透明度为0

.transparent{
    -moz-opacity: 0.00;
    opacity: 0.00;
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha"(Opacity=0);
    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
    filter:alpha(opacity=0);
}
而且它通常可以防止内容的不良flickr,但并不总是这样。现在可以通过某种方式检测jQueryAjax加载的内容,并应用一些显示超时等。但事实上,这个问题仍然悬而未决

现在为这个问题举一个更简单的例子:


在点击fire.load('something.php')函数的链接3000毫秒后,如何在$('body').load('something.php')之后开始更改DOM?(应该在单击后立即开始加载,但DOM更改必须在稍后启动)

一个可能有帮助的方法是放置html 在具有用户定义类型的某些脚本标记内 (或在脚本标记中加载html)

像这样:

<script type="text/template" id="myTemplate">
    <div>some html</div>
</script>
阿霍斯

不要使用.load()。这种方法确实是你想要避免的

尝试这样做:

  • 使用$.get、$.post、$.ajax或任何适合您的方法加载。通过这种方式,您可以将带有脚本的HTML代码作为HTML字符串
  • 创建隐藏div、透明div或其他元素以将内容放入其中。这里的技巧是确保在执行脚本之前不会显示此div。要做到这一点,唯一的方法是在要以这种方式加载的每个页面中添加最后一个脚本,并使用一个函数删除旧内容并显示新内容。作为最后一个脚本,它在其他脚本执行之前不会执行,因此您的DOM应该准备好了

  • 当然,如果您的脚本依赖于$(document).ready()之类的东西,这将不起作用,因为这将立即执行。图像也有同样的问题。它们是异步加载的,因此您不知道何时加载了所有它们,除非您将处理程序附加到每个映像的onload事件,这不是一个好主意。

    也许您应该使用承诺并尝试以下操作:

    $('a').click(function(){
        var href=$(this).attr('href');
        $('body').hide();
        $('body').load(href, function() {
          $('body').show();
        });
    });
    

    load有一个等待ajax请求完成的回调,您可以使用它,这都在中,如果您的插件有类似的回调,您也可以使用它们,否则超时可能是最简单的解决方案。
    $('a').click(function(){
        var href=$(this).attr('href');
        $('body').hide();
        $('body').load(href, function() {
          $('body').show();
        });
    });