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 на частичном представлении вместо родительского представления