Jquery ui Диалог: не может вызывать методы в диалоге перед инициализацией

У меня есть приложение на jquery 1.5, где диалоги работают нормально. Хотя у меня много обработчиков .live, я изменил это на .on. Для этого мне нужно обновить jquery (теперь 1.8.3 jquerui 1.9.1).

Теперь я получил: Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

Ниже приведен код:

Javascript

var opt = {
        autoOpen: false,
        modal: true,
        width: 550,
        height:650,
        title: 'Details'
};

$(document).ready(function() {
$("#divDialog").dialog(opt);
    $("#divDialog").dialog("open");
...    

html code

<div id="divDialog">
<div id="divInDialog"></div>
</div>

Любая идея, почему это может происходить?

Ответ 1

Попробуйте это вместо

$(document).ready(function() {
  $("#divDialog").dialog(opt).dialog("open");
});

Вы также можете сделать:

var theDialog = $("#divDialog").dialog(opt);
theDialog.dialog("open");

Это потому, что диалог не сохраняется в $('#divDialog'), а в новом div, который создается "на лету" и возвращается функцией .dialog(opt).

Ответ 2

Если вы не можете обновить jQuery и получаете:

Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

Вы можете обойти его так:

$(selector).closest('.ui-dialog-content').dialog('close');

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

$('.ui-dialog-content').dialog('close');

Я бы рекомендовал это сделать, если использование closest вызывает проблемы с производительностью. Есть, вероятно, другие способы обойти это, не делая глобального закрытия во всех диалогах.

Ответ 3

Я получил эту ошибку, когда я только обновил библиотеку jquery, не обновляя библиотеку jqueryui параллельно. Я использовал jquery 1.8.3 с jqueryui 1.9.0. Однако, когда я обновлял jquery 1.8.3 до 1.9.1, я получил вышеуказанную ошибку. Когда я прокомментировал оскорбительные строки метода .close, он затем сделал ошибку в том, что не нашел .browser в библиотеке jquery, которая устарела в jquery 1.8.3 и удалена из jquery 1.9.1. Таким образом, библиотека jquery 1.9.1 не была совместима с библиотекой jquery ui 1.9.0, несмотря на страницу загрузки jquery ui, в которой говорилось, что она работает с jquery 1.6+. По сути, есть неподтвержденные ошибки при попытке использовать разные версии этих двух. Если вы используете версию jquery, поставляемую в комплекте с загрузкой jqueryui, я уверен, что с вами все будет в порядке, но когда вы начнете использовать разные версии, которые вы отключили, и получите такие ошибки. Итак, в общем, эта ошибка связана с неверно подобранными версиями (в любом случае).

Ответ 4

Итак, вы используете это:

var theDialog = $("#divDialog").dialog(opt);
theDialog.dialog("open");

и если вы откроете Partial View MVC в диалоге, вы можете создать в индексе скрытую кнопку и событие JQUERY click:

$("#YourButton").click(function()
{
   theDialog.dialog("open");
   OR
   theDialog.dialog("close");
});

затем внутри частичного вида html вы вызываете кнопку триггера, например:

$("#YouButton").trigger("click")

см. ya.

Ответ 5

Если вы хотите открыть диалоговое окно сразу после инициализации диалогового окна или страницы, вы также можете установить параметр autoOpen в true в объекте параметров диалога:

var opt = {
        autoOpen: true,
        modal: true,
        width: 550,
        height:650,
        title: 'Details'
};

Таким образом, вам не нужно вызывать диалог `$ ( "# divDialog" ). ( "open" );

Когда объект диалога инициализируется, диалог автоматически открывается.

Ответ 6

Это также некоторая работа вокруг:

$("div[aria-describedby='divDialog'] .ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-icon-only.ui-dialog-titlebar-close").click();

Ответ 7

Мне просто нужно было добавить ScriptManager на страницу. Проблема решена.

Ответ 8

В моем случае проблема заключалась в том, что я вызвал $("#divDialog").removeData(); как часть сброса моих данных форм в диалоге.

Это привело к тому, что я уничтожил структуру данных с именем uiDialog что означало, что диалог должен был uiDialog инициализироваться.

Я заменил .removeData() на более конкретные удаления, и все снова заработало.

Ответ 9

Как я могу вызвать Java-метод из JQuery PopUp модальных

Ответ 10

Мой случай другой, он терпит неудачу из-за объема ' this ':

//this fails:
$("#My-Dialog").dialog({
  ...
  close: ()=>{
    $(this).dialog("close");
  }
});

//this works:
$("#My-Dialog").dialog({
  ...
  close: function(){
    $(this).dialog("close");
  }
});

Ответ 11

Новая версия пользовательского интерфейса jQuery не позволит вам вызывать методы пользовательского интерфейса в диалоговом окне, которое не инициализировано. В качестве обходного пути вы можете использовать приведенную ниже проверку, чтобы увидеть, жив ли диалог.

if (modalDialogObj.hasClass('ui-dialog-content')) {
    // call UI methods like modalDialogObj.dialog('isOpen')
} else {
    // it is not initialized yet
}

Ответ 12

Я получил это сообщение об ошибке, потому что у меня был тег div на частичном представлении вместо родительского представления