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>


есть идеи, почему это может происходить?

851   8  

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")

увидимся.

Если вы хотите открыть диалоговое окно сразу же после инициализации диалогового окна или готовности страницы, вы также можете установить параметр autoOpen to true в объекте 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();

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

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

Comments

    Ничего не найдено.