79

我有一个问题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(); },
    }); 
});

谢谢

4

12 回答 12

110

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

于 2009-04-13T22:43:16.897 回答
14

我解决了。

我使用了destroy而不是close函数(它没有任何意义),但它起作用了。

$(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' });
});
于 2008-12-14T19:42:19.473 回答
12

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

编辑:澄清一下,在关闭单击事件中,您正在#terms从 DOM 中删除 div,这就是它不回来的原因。你只需要隐藏它。

于 2008-12-14T19:37:11.747 回答
9

我相信您只能初始化对话框一次。上面的示例尝试在每次单击#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' });
});

我认为,一旦您清除了它,它应该可以解决您描述的“从链接打开”问题。

于 2009-10-27T23:40:29.890 回答
3

对我来说,这种方法有效:

可以通过单击对话框上的 X 或单击“注意”来关闭对话框。我正在添加一个(任意)id,因为我需要确保添加到 dom 的每一位 html 都在之后被删除。

$('<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();
               }
});
于 2010-05-25T09:48:53.727 回答
3
 <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>
于 2012-12-07T11:22:40.467 回答
3

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

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

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

从文档中:

破坏()

完全删除对话框功能。这会将元素返回到其 >>pre-init 状态。此方法不接受任何参数。

也就是说,只有在您有充分理由的情况下才在关闭时销毁或移除。

于 2013-10-23T16:52:35.063 回答
2
$(this).dialog('destroy');

作品!

于 2009-04-13T22:29:53.980 回答
1

.close() 更通用,可用于引用更多对象。.dialog('close') 只能与对话框一起使用

于 2010-01-28T14:50:52.550 回答
1

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

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

一切似乎都很好。

于 2010-09-27T13:42:23.937 回答
1

我对 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);
        }
    });

  }

}

一切正常

希望这可以帮助某人

O。

于 2011-06-06T16:25:43.020 回答
0

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

于 2010-04-12T21:40:50.690 回答