Подтвердить что ты не робот

JQuery UI dialog - проверить, существует ли метод экземпляра

Я бы хотел использовать метод instance для тестирования, если инициализирован виджет jQuery UI Dialog или нет. Что касается API, это возможно, но это не работает для меня:

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

demo: http://jsfiddle.net/mDbV7/

UPDATE:

Это было ошибкой в ​​документации, метод instance будет доступен с версии 1.11.0, см. эту проблему.

4b9b3361

Ответ 1

Последняя версия пользовательского интерфейса jQuery больше не позволяет вам вызывать методы пользовательского интерфейса для элементов, которые еще не инициализированы. Я только что завернул их в оператор if, например:

if ($("#divToBeDialoged").hasClass('ui-dialog-content')) {
    // do whatever
} else {
    // it is not initialized yet
}

Изменить: изменилось имя класса, спасибо @dmnc

Ответ 2

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

$("#myDialog").dialog({
    // other options
    close: function(event, ui) {
        $(this).empty().dialog('destroy');
    }
}

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

Ответ 3

Вы можете использовать:

if($('#id').is(':ui-dialog')) {
}

или

    var obj = $('<div>test</div>').dialog();
    if (obj.is(':ui-dialog')) {
      alert('I\'m a dialog')
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>

Ответ 4

     if ($('#update').is(':data(dialog)')) 
     {
              //#update has dialog
     }
     else
     {
              //#update does't have dialog
     }

Ответ 5

Для jQuery UI - v1.10.3

if($( "#myDialog" ).is(':data(uiDialog)')){//is(':data(dialog)') does not work
    //Dialog exist
}

Ответ 6

другой способ:

$('.element').is(':data(dialog)');

Ответ 7

Если вы создаете этот диалог из существующего идентификатора в своем html-коде, например, этот пример:

$('#main').dialog({});

Обратите внимание, что dialog() добавляет класс ui-dialog в родительский элемент <div>, сгенерированный для него. В элементе #main классы, добавленные dialog(), являются: ui-dialog-content и ui-widget-content (в jquery-ui-1.9.2). Итак, в этом случае, следуя примеру из @jbabey, вы можете проверить существующее диалоговое окно:

if ($('#main').hasClass('ui-dialog-content')) {
    // do whatever
}