如何让 jQueryUI 对话框动态加载内容

Posted

技术标签:

【中文标题】如何让 jQueryUI 对话框动态加载内容【英文标题】:How to have jQueryUI dialog box dynamically load content 【发布时间】:2011-04-11 07:35:42 【问题描述】:

我喜欢 jQueryUI 的对话框。但是,似乎没有一种方法可以动态加载内置内容。我想我必须使用其他方法来实现这一点? iframe 只有在内容可见时才会加载内容吗?这是正确的做法吗?

如果其他对话框机制更适合仅在首次打开时加载内容,我愿意接受。

【问题讨论】:

【参考方案1】:

我会亲自为您的对话框创建一个“视图”,然后扩展到您正在生成的对话框。对于测试用例,我使用了以下“视图”:

var dialog = 
    title: 'Dialog WITHOUT Modal',
    modal: false,
    height: 300
;

然后延伸到一个对话框:

$('#modal-btn-btns').click(function()
    $('#dialog-modal-btns')
        .dialog($.extend(dialog, 
            modal: true,
            width: 500,
            title: "Dialog with modal AND buttons",
            buttons: 
                "Trigger ALERT": function()alert("NICE CLICK!@!@!"),
                "Cancel": function()$(this).dialog('close');
            
        ))
        .html('This form has buttons!');
);

【讨论】:

【参考方案2】:

你可以在你的页面上创建一个空的 div

<div id="dialog-confirm"><div>

使用 autoopen = false 设置 jquery ui 对话框

    $("#dialog-confirm").dialog(
        resizable: false,
        autoOpen: false,
        height:140,
        modal: true,
        buttons: 
          'Delete all items': function() 
            $(this).dialog('close');
          ,
         Cancel: function() 
            $(this).dialog('close');
         
       
   );

然后,当您要加载动态页面时,使用 jquery ajax 调用将 html 动态放入 div,然后在该 div 上调用 dialog Open。下面是一个在按钮单击时加载动态页面的示例。

  $("#someButton").click(function()
  
       $.post("Controller/GetPage", function(data)
            $('#dialog-confirm').html(data);
            $('#dialog-confirm').dialog('open');
       , "html");
  

另外,如果您的页面在 ajax 调用中加载需要一段时间,您可能需要使用一些加载图像或 jquery blockui plugin 来显示正在加载的内容

【讨论】:

【参考方案3】:

这并不难做到——我不会仅仅因为这个而开始使用 iframe。这样的事情怎么样?

$( ".selector" ).dialog(
   open: function(event, ui) 
     $('#divInDialog').load('test.html', function() 
       alert('Load was performed.');
     );
   
);

基本上,您创建对话框,当它打开时,会从您的服务器加载一个 html 文件,替换您的 &lt;div id="divInDialog"&gt;&lt;/div&gt; 的内容,该文件应该在您的对话框 &lt;div class="selector"/&gt; 内。

【讨论】:

+1 - 在大多数情况下,您也可以只使用$(this).load("url") :) @Nick,如此真实......我只是习惯于这样做,因为我的对话框中有一些静态内容。感谢您指出。 谢谢牛头人和尼克,这就是我想要的。如果用户关闭对话框然后再次打开,.load() jQuery 函数会再次检索数据吗?我想如果没有,我总是可以为此设置一个 javascript 变量... @at:是的,每次打开对话框都会发生open事件,所以每次都会替换内容。看看文档:jqueryui.com/demos/dialog/#event-open 回复有点晚。这是我使用的机制。但现在的问题是,有时内容会使对话框太高(低于屏幕)。如何限制高度? maxHeight 选项仅在您调整对话框大小时起作用。

以上是关于如何让 jQueryUI 对话框动态加载内容的主要内容,如果未能解决你的问题,请参考以下文章

打开带有动态内容的 jQuery UI 对话框

动态jQuery UI对话框回调函数问题

如何触发使用 Parsley.js 动态创建的元素的验证?

jQuery 扩展 jquery 函数以动态加载内容

为啥我不能在我的 jQueryUI 模式对话框中输入 TinyMCE?

当内容长于高度时,可以让 jqueryUI 对话框滚动条从顶部开始吗?