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, см. эту проблему.
Ответы
Ответ 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
}