Включение файла из PHP внутри диалогового окна jQuery вводит в заблуждение JavaScript - PullRequest
2 голосов
/ 21 июня 2011

У меня есть 3 файла (file1.php, file2.php и file3.php). Их содержание приведено ниже. Когда я загружаю file1.php , он показывает два раза сообщение «Hello» в окне предупреждения. Но когда я включаю file3.php до или после диалогового окна (которое находится в file2.php ), тогда оно показывает это сообщение только один раз (что я и хочу).

Кто-нибудь знает, где проблема, пожалуйста?

Спасибо.

Содержимое file1.php

<?php 
     some operations
     require_once("file2.php");
?>

Содержимое 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> 

Содержимое file3.php

<script type="text/javascript">
  $(function () {
      alert('Hello');
  });
</script>
sometext

Ответы [ 3 ]

3 голосов
/ 21 июня 2011

Когда вы выполните $('#learning_activity_wizard_dialog').dialog(dialogOpts);, он снова запустит скрипт.

Если вы не хотите, чтобы это произошло, переместите этот тег скрипта из из div, который будет позжестать диалогом.

3 голосов
/ 21 июня 2011

Когда jQuery создает диалоговое окно, он копирует все в div learning_activity_wisard_dialog в новый узел DOM, включая тег script.

Итак, тег запускается один раз при загрузке страницы, затем снова при отображении диалога. Выньте свой скрипт из этого div или просто используйте некоторое bool, чтобы отследить, запущен он или нет.

2 голосов
/ 21 июня 2011

http://jsfiddle.net/uRhQT/

Я полагаю, это ваша проблема, добавив скрипт скрипт в HTML, который будет загружаться снова с помощью jquery.

Решение этого, что у вас есть только ... использоватьсценарий вне div.

Причина : содержимое тега сценария выполняется, когда оно определено как встроенное.Поэтому, когда отображается ваше диалоговое окно, содержимое копируется в диалоговое окно, что делает его новым встроенным сценарием.Таким образом, он выполняется и отображается другое окно предупреждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...