【问题标题】:In jquery UI dialog, is it possible to put a modal dialog on top of another modal dialog在 jquery UI 对话框中,是否可以将模态对话框放在另一个模态对话框的顶部
【发布时间】:2012-09-24 19:11:01
【问题描述】:

我有一个使用 jquery UI 对话框的模式对话框。我现在想在用户更改第一个对话框中的字段时弹出另一个对话框。两者都应该是模态的。

这可能吗,因为我尝试将这段代码放在那里,但似乎没有弹出任何内容。当从常规页面单击时,以下代码可以正常工作(其中带有 id 的选择控件:selectDropdownThatICanChange)但是如果我正在更改的同一个选择控件本身就是一个对话框,则对话框(“打开”)行什么也不做。更改事件触发并调用 open 方法,但没有弹出任何内容。

$("#secondModalDialog").dialog({
    resizable: false,
    height: 'auto',
    autoOpen: false,
    title: "Warning",
    width: 400,
    modal: true,
    buttons: {
        'Close': function () {
            $("#secondModalDialog").dialog('close');
        }
    }
});


$('#selectDropdownThatICanChange').live("change", function () {
    $("#secondModalDialog").dialog('open');
});

这里是对话框(只是一个 div)

<div id="secondModalDialog" style="display:none">
      This is a test <br/> This is  atest
</div>

【问题讨论】:

  • 认为您可以为要显示在顶部的包装器设置 z-index 值..
  • 似乎 jQuery ui 对话框是一个“单例”,坦率地说它应该是。我认为打开另一个对话框的对话框不会带来良好的用户体验。
  • 需要更多代码进行测试。你能提供给jsfiddle吗?
  • 从 jQuery 1.7 开始,live 已弃用,您运行的是什么版本?而且,扎希德里亚兹的回答有什么问题吗?如果有,是什么?

标签: jquery jquery-ui modal-dialog jquery-ui-dialog


【解决方案1】:

只是想让未来的发现者知道。可以使用 z-index 将 modalWidget 放在另一个之上。我正在使用 jquery ui 1.10.3。

你的方法是,你给你的对话框构造函数一个对话框类。

$("#secondModalDialog").dialog({
    title: 'Title',
    dialogClass: 'ModalWindowDisplayMeOnTopPlease',
    width: 200,
    height: 200
});

然后在你的 CSS 中,你指定一个比第一个对话框使用的更高的 z-index。

.ModalWindowDisplayMeOnTopPlease {
    z-index: 100;
}

您可能需要使用 firebug 或一些开发工具检查它使用的是哪个 z-index 来检查它是使用哪个 z-index 实例化的。在第一个模态小部件上,我的默认 z-index 为 90。窗口代码看起来像这样:

<div id="firstModalDialog" class="ui-dialog-content ui-widget-content" style="width: auto; min-height: 0px; max-height: none; height: 737px;">
<div class="ui-resizable-handle ui-resizable-n" style="z-index: 90;"></div>

【讨论】:

    【解决方案2】:

    您可以打开任意数量的模式,默认行为是按照它们打开的顺序堆叠。

    Demo: jsFiddle

    $('#dialog-modal').dialog({
        height: 300,
        modal: true,
        buttons: {
            'Another Modal': function() {
                $('#another-dialog-modal').dialog('open');
            },
            Cancel: function() {
                $(this).dialog('close');
            }
        }
    });
    
    $('#another-dialog-modal').dialog({
        autoOpen: false,
        buttons: {
            Cancel: function() {
                $(this).dialog('close');
            }
        }
    });
    

    【讨论】:

      【解决方案3】:

      UI 对话框不是单例的 您可以打开任意数量的对话框。默认情况下,它们是堆叠的。但是当 Dialog 获得焦点时,它会出现在其他对话框的前面。

      这是我为您创建的小提琴。 Open dialog from first dialog

      // HTML:
      <div id="dialog-modal" title="Basic modal dialog">
          Adding the modal overlay screen makes the dialog look more prominent because it dims out the page content.
          <select id="dialogSelect">
              <option>123</option>
               <option>234</option>       
          </select>
      </div>
      <div id="another-dialog-modal" title="2nd Modal :O">
          Second Modal yayyay
      </div>
      
      // JS:
      $( "#dialog-modal" ).dialog({
          height: 300,
          modal: true,
          buttons: {
              Cancel: function() {
                  $(this).dialog('close');
              }
          }
      });
      $("#dialogSelect").change(function(){
          $( "#another-dialog-modal" ).dialog('open');
      });
      $( "#another-dialog-modal" ).dialog({
          autoOpen: false,
          modal: true,
          buttons: {
              Cancel: function() {
                  $(this).dialog('close');
              }
          }
      });
      

      我在第一个对话框上放了下拉菜单,在更改事件上我在第一个对话框上方打开了另一个对话框。

      【讨论】:

        【解决方案4】:

        按照cmets中的sushanth reddy,设置对话框的z-index:

        $("#secondModalDialog").dialog({
            resizable: false,
            height: 'auto',
            autoOpen: false,
            title: "Warning",
            width: 400,
            modal: true,
            zindex: 1001, // Default is 1000
            buttons: {
                'Close': function () {
                    $("#secondModalDialog").dialog('close');
                }
            }
        });
        

        参考:http://docs.jquery.com/UI/API/1.8/Dialog#option-zIndex

        【讨论】:

        • 这似乎没有任何区别
        • 那么您将不得不发布更多代码,尤其是。第一个对话框的 z-index。
        • 我在第一个上没有任何 zindex 代码。我尝试将显式设置为 1000(小于秒),但这似乎并没有改变任何东西
        猜你喜欢
        • 2011-09-22
        • 1970-01-01
        • 1970-01-01
        • 2015-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-29
        相关资源
        最近更新 更多