Разница между .dialog( "close" ) и .dialog( "destroy" )

В чем разница между .dialog("close") и .dialog("destroy") в jquery-ui?

У меня есть script, где предыдущий разработчик использовал .dialog("destroy"), но теперь я должен выполнить некоторые действия после закрытия диалога. Я нашел beforeclose, который вызывается с .dialog("close"), а не с .dialog("destroy"). Поэтому я должен изменить метод от destroy до close, чтобы он работал.

Так есть что-нибудь, что я пропущу, если я использую .dialog("close"), а не .dialog("destroy")?

PS: В диалоговом окне используются пользовательские кнопки для закрытия, а .dialog("close") вызывается при событии клика кнопки

Ответы

Ответ 1

close оставляет диалог настроенным, но невидимым, поэтому вы можете снова открыть его с помощью .dialog('open').

destroy полностью деконфигурирует диалоговое окно. Он удалит все элементы пользовательского интерфейса, которые были добавлены в DOM, и любые связанные обработчики событий.

destroy не удалит элемент, содержащий содержимое диалогового окна (т.е. элемент, который вы вызываете .dialog)

Ответ 2

Помните, что если вы используете диалоговое окно для ввода форм, это уничтожает его, а НЕ удаляет ваш вход, поэтому, если вы проверяете с помощью псевдо-селектора: элементы, которые вы уничтожили, будут проверены. Это где .remove() пригодится.

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

$dialog = $("#your_dialog_id");
$dialog.dialog('option', {
        title: "title",
        close: function (event, ui) {
            $dialog.find("form").remove();
            $dialog.dialog('destroy');
        }
    });

Ответ 3

От Документы:

уничтожить:

Полностью удаляет функциональность диалога. Это вернет элемент возвращается в исходное состояние.

близко:

Закрывает диалоговое окно, которое может повторно открываться при необходимости.