1

我有一个非常简单的 javascript 动画,看起来像这样

$(function() {
$('#slider1').cycle();
$('#slider2').cycle();
});

然后我像这样在这个脚本中调用:

<script type="text/javascript" src="js/slider.js"></script>

然后 id 为“slider1”和“slider2”的 div 包含在 php 包含文件中,这些文件被调用到页面中,如下所示:

<?php include('assets/col1.php'); ?>

包含文件中的代码如下所示:

<div id="slider1">
<img src="images/image1.png" />
<img src="images/imgae2.png" />
<img src="images/image3.png" />
<img src="images/image4.png" />
</div>

除非您使用 IE8 或 IE9,否则它工作正常。javascript 将在大约 75% 的时间内工作,这就是为什么这让我感到困惑。当您加载页面或返回页面时,每隔一段时间它就不会激活 javascript,并且所有图像都呈现在一长列中(基本上是没有 js 函数的样子)

我怀疑它在 IE9 加载 PHP 和 javascript 的顺序中的某些东西,但我只是 js 和 php 的新手,所以关于如何解决这个问题的一些非常明确的帮助会非常棒。提前致谢。

4

2 回答 2

1

好长的故事……

PHP 将返回解释的 HTML。每次包含文件时,PHP 都会刷新缓冲区,这意味着某些内容会先于其他内容返回到浏览器。发生这种情况时,页面仍处于加载状态。

因此,您需要确保调用$(document).ready(function(e){ ... });. 这将使您的代码有机会在执行 javascript 之前完成刷新缓冲区并加载到浏览器中。

于 2012-09-01T03:01:12.163 回答
0

我在使用Dojo的时候也遇到过类似的问题,解决方法如下: 将主div或父div的显示样式设置为none:

<div id="g_body" style="display:none">

现在,一旦 Dojo 完成加载,我使用 dojo.ready 函数将显示样式更改为阻塞:

require(["dojo/ready", "dojo/parser", "dijit/registry"], function(ready, parser, registry){
  ready(function(){
    if(document.getElementById("g_body")!= null){
        document.getElementById("g_body").setAttribute("style","display:block");
    }
  });
});

然后页面仅在 Dojo 元素完全加载时显示。

我相信 jQuery 中有类似的东西,但我不确定。大概:

$(document).ready(function() {});

希望这可以帮助。

于 2012-09-01T06:20:25.337 回答