Javascript выполняется более одного раза в диалоге JQuery - PullRequest
1 голос
/ 12 мая 2011

Я пытаюсь использовать код JavaScript в «диалоге jquery», и мой код выполняется более одного раза.

Простой пример ..

<div id='dialog'>
    <script type="text/javascript">
        $(document).ready(function () {
            console.log('inside'); 
        }); 
    </script>
</div>

<script type="text/javascript">
    $(document).ready(function () {
        console.log('Dialog init');
        $('#dialog').dialog();
    })
</script>

И мой вывод:

  1. внутри
  2. Диалог init
  3. внутри

Ответы [ 3 ]

2 голосов
/ 12 мая 2011

Может быть, это то, что вы хотите, Cmiiw, пожалуйста:)

<div id='dialog'></div>

<script type="text/javascript">
    $(document).ready(function () {
        console.log('Dialog init');
        $('#dialog').dialog();
    })

    $( "#dialog" ).dialog({
      open: function() {
                 console.log('inside');
            }
    });    
</script>
1 голос
/ 12 мая 2011

Выполните следующие действия:

<div id='dialog'></div>

<script type="text/javascript">
    $(document).ready(function (){
        console.log('Dialog init');
        $('#dialog').dialog({
            open: function() {
                console.log('inside');
            }
        });
    })
</script>

При использовании события open ваш код запускается при открытом диалоговом окне, а не когда документ готов.

http://jqueryui.com/demos/dialog/#event-open

1 голос
/ 12 мая 2011

Ну, тогда это имеет смысл ...

jQuery, вероятно, находит где-то содержимое #dialog, и код внутри снова выполняется.

Почему в окне #dialog есть JS? Это загружено с XHR? Если нет: переместите его туда, где находится остальная часть кода domready.

Хотите ли вы, чтобы событие вызывалось при отображении диалогового окна? Поэтому в диалоге есть код? Если это так, то для этого существует API событий: http://jqueryui.com/demos/dialog/#events

...