document.ready被多次调用

时间:2009-11-04 22:36:14

标签: php jquery

在我的php应用程序中,我有多个模板,这些模板组合在一起形成一个页面。所以说你的关于我们的页面,模板看起来像这样

<?php
    $this->render("header.php");
?>

my about us page

<?php
  $this->render("footer.php");
?>

这只是做一个include()的奇特方式。但是,header.php有一些javascript可以通过jquery框架在document.ready上运行,需要头文件的页面也是如此。所以你有这样的东西

<?php
    $this->render("header.php"); // has its own $(document).ready
?>
<script type="text/javascript">
     $(document).ready(function(){
          console.log("test");
     });
 </script>
my about us page

<?php
  $this->render("footer.php");
?>

我遇到的错误是document.ready会在页面上为每个document.ready调用一次。在上面的案例控制台显示

测试

测试

如果我注释掉header.php的渲染,那么document.ready会像我想的那样被调用一次。

除了使用信号量之外,更好的方法是防止这种情况发生?我尝试缓冲输出,但这似乎不起作用。

编辑:为每个请求添加最终输出

<script type="text/javascript">
     $(document).ready(function(){
          // do some javascript like highlighting 
          // form elements with specific classes
     });
</script>
  display header here 

<script type="text/javascript">
     $(document).ready(function(){
          console.log("test");
     });
 </script>
my about us page

display footer

2 个答案:

答案 0 :(得分:1)

我刚尝试在本地运行您的最终输出,并且控制台中只显示一条“测试”消息,正如预期的那样。

您是否包含任何其他JS库? JS中可能有一些代码已经编辑出来,导致了这一点。

答案 1 :(得分:1)

我把这个演示代码放在一起,但是无法重现这个问题...希望它可以帮助你...

<html>
<head>
  <title>test</title>
</head>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
     $(document).ready(function(){
          // do some javascript like highlighting 
          // form elements with specific classes
      $('.some-element').css('background', '#eec');
     });
</script>

display header here 

<script type="text/javascript">
     $(document).ready(function() {
          $('body').append("<p>test</p>");
     });
 </script>

<p class='some-element'>
my about us page
display footer
</p>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
</body>
</html>