У меня проблема с jquery-ui dialog box.
Проблема в том, что когда я закрываю диалоговое окно, а затем нажимаю ссылку, которая его запускает, оно не появляется снова, пока я не обновлю страницу.
Как я могу вызвать диалоговое окно, не обновляя фактическую страницу.
Ниже мой код:
$(document).ready(function() {
$('#showTerms').click(function()
{
$('#terms').css('display','inline');
$('#terms').dialog({
resizable: false,
modal: true,
width: 400,
height: 450,
overlay: { backgroundColor: "#000", opacity: 0.5 },
buttons:{ "Close": function() { $(this).dialog("close"); } },
close: function(ev, ui) { $(this).remove(); },
});
});
Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


в последней строке не используйте $(this).remove(), вместо этого используйте $(this).hide().
Обновлено: Чтобы уточнить, при закрытии события щелчка вы удаляете div #terms из DOM, поэтому он не возвращается. Вместо этого вам просто нужно скрыть это.
Я решил это.
Я использовал функцию уничтожения вместо функции закрытия (это не имеет никакого смысла), но она сработала.
$(document).ready(function() {
$('#showTerms').click(function()
{
$('#terms').css('display','inline');
$('#terms').dialog({resizable: false,
modal: true,
width: 400,
height: 450,
overlay: { backgroundColor: "#000", opacity: 0.5 },
buttons:{ "Close": function() { $(this).dialog('**destroy**'); } },
close: function(ev, ui) { $(this).close(); },
});
});
$('#form1 input#calendarTEST').datepicker({ dateFormat: 'MM d, yy' });
});
Почти. Вы правы в том, что сначала инициализируете его, но после этого это .dialog ("open") и .dialog ("close")
$(this).dialog('destroy');
работает!
На самом деле вы должны использовать $("#terms").dialog({ autoOpen: false }); для его инициализации.
Затем вы можете использовать $('#terms').dialog('open');, чтобы открыть диалоговое окно, и $('#terms').dialog('close');, чтобы закрыть его.
Это прекрасно работает. Документы пользовательского интерфейса jQuery здесь не очень понятны. Но идея о том, что функция dialog предназначена для инициализации, отображения и скрытия, имела для меня смысл. Спасибо.
Если вы загружаете это диалоговое окно из HTML, который может динамически изменяться, очень неинтуитивно, почему он не работает. У кого-нибудь есть хорошие решения, которые можно применить в целом к этим ситуациям?
@Milimetric Вы всегда можете использовать $ (this) .remove (); функции в конце каждой из кнопок вашего диалога, таким образом весь диалог будет полностью переделан с нуля, когда вы вызовете его снова. Обратите внимание, что эта функция действует иначе, чем $ (this) .dialog ("destroy"); так как он только возвращает диалог в его состояние до инициализации, не разрушая объект.
Я считаю, что вы можете инициализировать диалог только один раз. В приведенном выше примере выполняется попытка инициализировать диалоговое окно каждый раз при нажатии #terms. Это вызовет проблемы. Вместо этого инициализация должна происходить вне события щелчка. Ваш пример, вероятно, должен выглядеть примерно так:
$(document).ready(function() {
// dialog init
$('#terms').dialog({
autoOpen: false,
resizable: false,
modal: true,
width: 400,
height: 450,
overlay: { backgroundColor: "#000", opacity: 0.5 },
buttons: { "Close": function() { $(this).dialog('close'); } },
close: function(ev, ui) { $(this).close(); }
});
// click event
$('#showTerms').click(function(){
$('#terms').dialog('open').css('display','inline');
});
// date picker
$('#form1 input#calendarTEST').datepicker({ dateFormat: 'MM d, yy' });
});
Я думаю, что как только вы это проясните, он должен исправить описанную вами проблему «открытие по ссылке».
.close () является более общим и может использоваться по отношению к большему количеству объектов. .dialog ('close') можно использовать только с диалогами
В документации jQuery есть ссылка на эту статью. 'Базовое использование диалогового окна пользовательского интерфейса jQuery' это объясняет эту ситуацию и как ее разрешить.
Для меня такой подход работает:
Диалог можно закрыть, щелкнув X в диалоговом окне или нажав «Bewaren». Я добавляю (произвольный) идентификатор, потому что мне нужно быть уверенным, что каждый бит HTML, добавленный в dom, впоследствии будет удален.
$('<div id = "dossier_edit_form_tmp_id">').html(data.form)
.data('dossier_id',dossier_id)
.dialog({
title: 'Opdracht wijzigen',
show: 'clip',
hide: 'clip',
minWidth: 520,
width: 520,
modal: true,
buttons: { 'Bewaren': dossier_edit_form_opslaan },
close: function(event, ui){
$(this).dialog('destroy');
$('#dossier_edit_form_tmp_id').remove();
}
});
Я использую диалог как браузер и загрузчик диалоговых файлов, а затем переписываю код следующим образом
var dialog1 = $("#dialog").dialog({
autoOpen: false,
height: 480,
width: 640
});
$('#tikla').click(function() {
dialog1.load('./browser.php').dialog('open');
});
вроде все отлично работает.
У меня была такая же проблема с диалоговым окном наложения jquery-ui - он работал только один раз, а затем останавливался, если я не перезагружаю страницу. Я нашел ответ в одном из их примеров -
Несколько оверлеев на одной странице
flowplayer_tools_multiple_open_close
- а кто бы мог, правда ?? :-) -
важная настройка оказалась
oneInstance: false
Итак, теперь у меня это так -
$(document).ready(function() {
var overlays = null;
overlays = jQuery("a[rel]");
for (var n = 0; n < overlays.length; n++) {
$(overlays[n]).overlay({
oneInstance: false,
mask: '#669966',
effect: 'apple',
onBeforeLoad: function() {
overlay_before_load(this);
}
});
}
}
и все работает нормально
надеюсь, это кому-то поможет
О.
<button onClick = "abrirOpen()">Open Dialog</button>
<script type = "text/javascript">
var $dialogo = $("<div></div>").html("Aqui tu contenido(here your content)").dialog({
title: "Dialogo de UI",
autoOpen: false,
close: function(ev, ui){
$(this).dialog("destroy");
}
function abrirOpen(){
$dialogo.dialog("open");
}
});
//**Esto funciona para mi... (this works for me)**
</script>
Это очень старая ветка, но поскольку в ответе даже говорится: «Это не имеет никакого смысла», я подумал, что добавлю ответ ...
Исходный пост использовал $ (this) .remove (); в обработчике закрытия это фактически удалит div диалога из DOM. Попытка снова инициализировать диалог не сработает, потому что div был удален.
Использование $ (this) .dialog ('destroy') вызывает метод destroy, определенный в объекте диалога, который не удаляет его из DOM.
Из документации:
destroy()
Removes the dialog functionality completely. This will return the element back to its >>pre-init state. This method does not accept any arguments.
Тем не менее, уничтожайте или удаляйте только близко, если у вас есть для этого веская причина.
Destroy будет работать, если вы используете этот метод, но для того, чтобы close () работал, сначала создайте экземпляр диалога, затем используйте dialog.show (), чтобы показать его, затем dialog.close (), чтобы закрыть его, и он снова откроется без проблем. .