it-swarm.com.ru

Диалоговое окно JQuery UI - * Диалог, а не функция * Ошибка

Я занимаюсь разработкой сайта с использованием pinax. В одном из моих шаблонов я пытаюсь открыть простое диалоговое окно jquery. Однако я продолжаю получать ошибку «Диалог не функция» javascript. Я использую jquery 1.2.6 и jquery-ui 1.6. Мой JavaScript и HTML выглядят следующим образом: 

<html>
<head>
<link type="text/css" href="/site_media/smoothness/ui.all.css" rel="stylesheet" />
<script src="/site_media/jquery.js" type="text/javascript"></script>
<script src="/site_media/ui/ui.core.js" type="text/javascript"></script>
<script src="/site_media/ui/ui.draggable.js" type="text/javascript"></script>
<script src="/site_media/ui/ui.resizeable.js" type="text/javascript"></script>
<script src="/site_media/ui/ui.dialog.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
                    $('#dialogbox').dialog();
            });
 </script>
 </head>
 <body>
   <div id="dialogbox" title="dialog title">
     <p>Test dialog</p>
   </div>
 </body>
 </html>

Может кто-нибудь объяснить, почему это происходит?

17
kartikq

Я попытался продублировать вашу ошибку как с помощью общедоступных версий Google, так и путем загрузки устаревшей (1.6) версии с сайта пользовательского интерфейса jQuery, а также вручную, включая файлы. Ни один из них не вызвал проблему ( http://jsbin.com/uloqi чтобы увидеть, как она работает). 

Итак, это означает, что одно из следующего может решить вашу проблему:

  1. Используйте такой инструмент, как Firebug для Firefox, чтобы убедиться, что каждый файл JS включен.
  2. Убедитесь, что на странице нет других JS, которые могли бы вызвать ошибку.
  3. Убедитесь, что у вас есть правильные версии загруженных файлов.

Я не знаю, что еще вам сказать, так как код, который вы вставили, в паре с нужными файлами, работает отлично.

36
Doug Neiner

У меня была та же проблема, что и описанная выше (окно сообщения открывается только один раз). Проблема у меня была в том, что HTML в окне сообщения также загружает JQuery. Так как мне это не нужно, я могу удалить его без проблем. В противном случае вам, возможно, придется решить проблему немного дальше.

4
Sander

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

В моем случае у меня есть страница ASP, в которой используется мастер . Мой мастер включал JQuery 1.4.2.minМоя страница aspx Я включил JQuery 1.7.2.min

Когда функции JQuery вызывались из элемента управления, он не понимал, какой JQuery использовать, поэтому, несмотря на то, что этот скрипт мог указать, что JQuery был загружен (он мог отображать версию JQuery), он не смог найти какие-либо функции JQuery.

Когда я удалил локальное включение JQuery 1.7.2.min из моего файла aspx и обновил mater с 1.4.2.min до 1.7.2.min, проблема исчезла.

2
Paul Gorbas

Ответ Дуга Нейнера очень помог. Мой случай был немного сложнее, но все же дошел до той же точки:

Я открыл диалог со страницы A, который загружает страницу B следующим образом:

$('#MyDiv').dialog({
    autoOpen: false
})
$("#MyDiv").load("PageB.aspx", function () {
    $("#MyDiv").dialog("open");
});

Проблема в том, что и страница A, и B включили jQuery. Имейте в виду: если вы загружаете другую страницу в диалоговое окно, она не должна включать в себя те же JS.

2
user1575422

У меня просто есть эта проблема, и единственное решение, которое работает для меня, было сохранить ссылку на диалог, как:

var confirmDialog = $( "#dialog-confirm" ).dialog({
    autoOpen: false
});
$("#test").click(function () {
    confirmDialog.dialog('open');
});

В противном случае все, что я пытался с ошибкой 

.dialog () не является ошибкой функции
Надеюсь, это поможет.

0
Striped

Как уже объяснялось, вы, вероятно, переопределяете существующие библиотеки.

Один из способов справиться с этим - убедиться, что загружены правильные файлы.

Другой способ - вставить iframe между диалогом и содержимым в диалоге. Iframes обрабатываются браузером как отдельная страница со своими собственными скриптами. Таким образом, сценарии содержимого «поверх» iframe будут отделены от сценариев диалога «под» iframe. 

0
Gerhard Liebenberg

У меня такая же проблема. Мой был нанесен самостоятельно из обновления пользовательского интерфейса jQuery с 1.11.4 до 1.12.1. Я установил обновление, используя NuGet, и NuGet удалил старую ссылку 1.11.4 из моего проекта, но так и не добавил новую ссылку на проект. 

Локальный запуск приложения работал отлично, но при его развертывании новый файл 1.12.1 так и не был опубликован. Я надеюсь, что это помогает кому-то еще.

0
Rafiki