在我的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
答案 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>