jQuery UI对话框 – closures后不打开

我有一个jQueryUI的对话框的问题。 问题是,当我closures对话框,然后我点击链接触发它,它不会popup,除非我刷新页面。 如何在不刷新实际页面的情况下调用对话框。 看一看:

$(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(); }, }); }); 

谢谢

你实际上应该使用$("#terms").dialog({ autoOpen: false }); 初始化它。 然后你可以使用$('#terms').dialog('open'); 打开对话框, $('#terms').dialog('close'); closures它。

嗨,我设法解决它。

我用摧毁,而不是closuresfunction(这没有任何意义),但它的工作!

 $(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' }); }); 

在最后一行,不要使用$(this).remove()使用$(this).hide()来代替。

编辑:澄清,在closures点击事件,你正在从DOM删除#terms div,这就是为什么它不回来。 你只需要隐藏它。

我相信你一次只能初始化对话框。 上面的例子试图每次点击#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' }); }); 

我想,一旦你清楚了,就应该解决你所描述的“打开链接”的问题。

对我来说这个方法是有效的

单击对话框上的X或单击“Bewaren”可以closures对话框。 我添加一个(任意)的id,因为我需要确保每一个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(); } }); 
  <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> 

这是一个超古老的线程,但由于答案甚至说“这没有任何意义”,我想我会添加答案…

原来的post使用$(this).remove(); 在closures处理程序中,这实际上会从DOM中删除对话框div。 试图再次初始化对话框将无法正常工作,因为div被删除。

使用$(this).dialog('destroy')调用在对话框中定义的方法destroy,它不会从DOM中删除它。

从文档:

破坏()

彻底删除对话function。 这会将元素返回到其“>> pre-init”状态。 此方法不接受任何参数。

这就是说,只有在你有充分的理由的情况下,才能消灭或移除。

 $(this).dialog('destroy'); 

作品!

.close()是通用的,可以用来引用更多的对象。 .dialog('close')只能用于对话框

我使用对话框作为对话框文件浏览器和上传,然后我重写这样的代码

 var dialog1 = $("#dialog").dialog({ autoOpen: false, height: 480, width: 640 }); $('#tikla').click(function() { dialog1.load('./browser.php').dialog('open'); }); 

一切似乎都很好。

我有jquery-ui覆盖对话框相同的问题 – 它只会工作一次,然后停止,除非我重新加载页面。 我在其中一个例子中find答案 –
在同一页面上叠加多个
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); } }); } } 

一切正常

希望这有助于某人

O.

jQuery文档有一个链接到这篇文章“ jQuery UI对话框的基本用法 ”,它解释了这种情况以及如何解决这个问题。