0

我有一个 JQuery UI 对话框,可以在其中打开另一个页面。在我单击取消并尝试再次单击它后,它没有打开。我在网上搜索并找到了一个答案,说我只需要初始化一次对话框,然后在用户单击按钮时调用 open。我尝试将初始化代码移动到页面加载部分,并且只为按钮执行对话框(“打开”),但我仍然遇到与以前相同的问题。您如何设置对话框以便可以取消并再次打开它?

初始化代码:

var scanDialog = $( "#dialog" ).dialog({
                  height:600,
                          width:800,
                  modal: true,
                          autoOpen:false,
                  buttons: {
                    "Scan": function() {
                         //scanning code 
                    },
                    Cancel: function() {
                                 scanDialog.load("url.html").dialog("close");
                    }
                  }
                });

加载代码:

scanDialog.load("url.html").dialog('open');
4

3 回答 3

1

尝试从 DOM 中销毁对话框

 scanDialog.load("url.html").dialog("destroy");

为了不松散 div id,您可以将对话框 id 附加到它的父 DOM 名称。

     var DialogParent = $(this).parents("div:eq(0)");
      var Diag = myParent.attr('id') + 'Diag';

      var scanDialog = $( "#" + Diag ).dialog({
                  height:600,
                          width:800,
                  modal: true,
                          autoOpen:false,
                  buttons: {
                    "Scan": function() {
                         //scanning code 
                    },
                    Cancel: function() {
scanDialog.load("url.html").dialog("destroy");// Destroy, not close
                    }
                  }
                });

然后,

 $("#" + Diag).dialog('open');
于 2013-05-16T19:23:34.080 回答
0

也许不是一个正确的答案,但几个月前我遇到了类似的问题,这是因为“modal:true”属性。我必须删除 modal 属性才能使按钮起作用。我认为这是jquery中的一个错误。

于 2013-05-16T18:32:45.717 回答
0

这似乎是一个不必要的麻烦问题。使用“自动对焦”只会工作一次。一些修复适用于 IE,但不适用于 Chrome。所以要修复,我需要几个步骤,其中一部分是合并上面提到的“.dialog('destroy')”。我正在将焦点添加到对话框弹出窗口上的“是”按钮。

首先,我添加了一个带有 focus() 调用的 open 函数。在我们的系统上,它需要“setTimeout”包装器:

open: function()
{
    setTimeout(function() {
        $('#yesDialog').focus();
    }, 100);
},

添加“id”:

}, id: 'yesDialog'

关键的一步是将“关闭”对话框更改为“销毁”对话框:

所以从:

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

至:

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

取出我们特定的绒毛,将它们放在一起看起来像这样:

var prompt = 'Are you sure?';
$('<p>'+prompt+'</p>').dialog({
    autoOpen: true,
    draggable: false,
    modal: true,
    title: 'Save Data',
    dialogClass: 'no-close',
    open: function() {
        setTimeout(function() {
            $('#yesDialog').focus();
        }, 100);
    },
    buttons: [{
        text: 'Yes',
        click: function() {
            $(this).dialog('destroy');
            //...our fluff
        }, id: 'yesDialog'
    }, {
        text: 'No',
        click: function() {
            $(this).dialog('destroy');
        }
    }]
});
于 2018-08-14T17:01:52.417 回答