在jQuery的对话框中包含来自PHP的文件会误导javascript

在jQuery的对话框中包含来自PHP的文件会误导javascript,php,jquery,include,Php,Jquery,Include,我有3个文件(file1.php、file2.php和file3.php)。其内容如下。当我加载file1.php时,它会在一个警报框中显示两次“Hello”消息。但当我在对话框(在file2.php中)之前或之后包含file3.php时,它只显示该消息一次(这是我想要的) 有人知道问题出在哪里吗 谢谢 file1.php的内容 <?php some operations require_once("file2.php"); ?> <script typ

我有3个文件(file1.php、file2.php和file3.php)。其内容如下。当我加载file1.php时,它会在一个警报框中显示两次“Hello”消息。但当我在对话框(在file2.php中)之前或之后包含file3.php时,它只显示该消息一次(这是我想要的)

有人知道问题出在哪里吗

谢谢

file1.php的内容

<?php 
     some operations
     require_once("file2.php");
?>
<script type="text/javascript">
   $(document).ready(function() {
       var dialogOpts={        
         autoOpen: true,
         modal: false,
         height: "auto",
         resizable: false,
         closeOnEscape: true,
         width: 700,
         position: ["center",30]
       }
       $('#learning_activity_wizard_dialog').dialog(dialogOpts);
   });
</script>
<?php 
     some operations         
?>
<div id="learning_activity_wizard_dialog" title="Learning Activity Wizard" class="dialogbox">
    some content
    <?php require_once("file3.php"); ?>
</div> 
<script type="text/javascript">
  $(function () {
      alert('Hello');
  });
</script>
sometext

file2.php的内容

<?php 
     some operations
     require_once("file2.php");
?>
<script type="text/javascript">
   $(document).ready(function() {
       var dialogOpts={        
         autoOpen: true,
         modal: false,
         height: "auto",
         resizable: false,
         closeOnEscape: true,
         width: 700,
         position: ["center",30]
       }
       $('#learning_activity_wizard_dialog').dialog(dialogOpts);
   });
</script>
<?php 
     some operations         
?>
<div id="learning_activity_wizard_dialog" title="Learning Activity Wizard" class="dialogbox">
    some content
    <?php require_once("file3.php"); ?>
</div> 
<script type="text/javascript">
  $(function () {
      alert('Hello');
  });
</script>
sometext

$(文档).ready(函数(){
var dialogOpts={
自动打开:对,
莫代尔:错,
高度:“自动”,
可调整大小:false,
closeOnEscape:没错,
宽度:700,
位置:[“中间”,30]
}
$(“#学习"活动"向导"对话框)。对话框(dialogOpts);
});
一些内容
file3.php的内容

<?php 
     some operations
     require_once("file2.php");
?>
<script type="text/javascript">
   $(document).ready(function() {
       var dialogOpts={        
         autoOpen: true,
         modal: false,
         height: "auto",
         resizable: false,
         closeOnEscape: true,
         width: 700,
         position: ["center",30]
       }
       $('#learning_activity_wizard_dialog').dialog(dialogOpts);
   });
</script>
<?php 
     some operations         
?>
<div id="learning_activity_wizard_dialog" title="Learning Activity Wizard" class="dialogbox">
    some content
    <?php require_once("file3.php"); ?>
</div> 
<script type="text/javascript">
  $(function () {
      alert('Hello');
  });
</script>
sometext

$(函数(){
警惕(“你好”);
});
一些文字

当jQuery创建对话框时,它会将learning\u activity\u wisard\u dialog div中的所有内容复制到新的DOM节点,包括脚本标记

因此,标签在页面加载时运行一次,然后在对话框呈现时再次运行。将脚本移出该div,或者只使用一些bool来跟踪它是否已经运行。

当您执行
$(“#学习活动向导对话框”)。对话框(dialogOpts)它将再次运行脚本

如果不希望发生这种情况,请将脚本标记移出
div
,该div将成为一个对话框。

我想这就是您的问题所在,在html中添加脚本标记将使用jquery再次加载

解决这个问题的办法是你只有。。。在div之外使用脚本


原因:脚本标记内容在内联定义时执行。因此,当显示对话框时,内容将复制到对话框中,从而生成新的内联脚本。因此,它将被执行,并显示另一个警报框

file2.php
中,在
file3.php
@Kerry的include周围缺少一个结束php标记。抱歉,我在stackoverflow中键入时出错。为什么要在对话框元素中包含javascript?你能把它移到别处吗?我把file3.php包含在dialogbox(file2.php)中,因为file3.php在alert(“Hello”)旁边有很多代码;为了使代码更具可读性,我想把它分开。除了file3.php之外,file2.php中还包含了file4.php和file5.php