jQuery UI Dialog: не удается вызвать методы в диалоговом окне до инициализации
у меня есть приложение на jQuery 1.5 с диалогами работал нормально.
Пока у меня их много .живые обработчики, я изменил это .на.
Для этого мне нужно обновить 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-код
<div id="divDialog">
<div id="divInDialog"></div>
</div>
есть идеи, почему это может происходить?
8 ответов:
попробуйте это вместо
$(document).ready(function() { $("#divDialog").dialog(opt).dialog("open"); });вы также можете сделать:
var theDialog = $("#divDialog").dialog(opt); theDialog.dialog("open");это потому, что диалог не хранится в
$('#divDialog'), но на новом div, который создается на лету и возвращается .
если вы не можете обновить 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вызывает проблемы с производительностью. Вероятно, есть и другие способы обойти это, не делая глобального закрытия всех диалогов.
Я получил эту ошибку, когда я только обновил библиотеку 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, я уверен, что вы будете в порядке, но когда вы начинаете использовать разные версии, вы сбиваетесь с пути и получаете такие ошибки. Итак, вкратце, эта ошибка от неправильно подобранных версий (в моем случае в любом случае).
Итак, вы используете это:
var theDialog = $("#divDialog").dialog(opt); theDialog.dialog("open");и если вы откроете частичное представление MVC в диалоговом окне, вы можете создать в индексе скрытую кнопку и событие щелчка JQUERY:
$("#YourButton").click(function() { theDialog.dialog("open"); OR theDialog.dialog("close"); });затем внутри частичного просмотра html вы вызываете кнопку триггера нажмите, как:
$("#YouButton").trigger("click")увидимся.
Если вы хотите открыть диалоговое окно сразу же после инициализации диалогового окна или готовности страницы, вы также можете установить параметр
autoOpentotrueв объекте Options диалогового окна:var opt = { autoOpen: true, modal: true, width: 550, height:650, title: 'Details' };таким образом, вам не нужно вызывать `$("#divDialog").диалог("открыть");
при инициализации объекта dialog диалоговое окно открывается автоматически.
Это также некоторые работы вокруг:
$("div[aria-describedby='divDialog'] .ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-icon-only.ui-dialog-titlebar-close").click();
Я получил это сообщение об ошибке, потому что у меня есть тег div на частичный вид вместо родительского вида
Comments