【问题标题】:Closing a Jquery UI dialog from inside从内部关闭 Jquery UI 对话框
【发布时间】:2012-06-07 10:06:57
【问题描述】:

我有 2 个页面,比如 page1.html 和 page2.html。

page1.html 有这个代码:

$(document).ready(function() {
                   $('#mydialog').dialog({autoOpen : false, modal : true});
                   $('#myopenlink').click(function() {
                                             $('#mydialog').load('page2.html');
                                             $('#mydialog').dialog('open');
                                             return false;
                                           });                                 
                   });

page1.html 中的相关 HTML 元素:

<a href="#" id="myopenlink"> Open </a>
<div id="mydialog"> </div>

当我点击“myopenlink”时,我会得到一个显示 page2.html 的模式对话框。

现在,在 page2.html 中,我有另一个链接(或提交按钮等)。我想在单击对话框后关闭它(即从它加载的页面中关闭对话框)。

这可能吗?

编辑:

经过一番挖掘,我想我的问题不是专门针对对话框的。这就是我想要做的:

page2.html 内容:

<a href="#" id="mycloselink"> close </a>

page1.html 内容:

function closeLinkClicked(event) {
    event.preventDefault();
    alert('Please Reach this point so I replace this with close dialog');
}

function doneLoading(data) {
    $('#mydiv').on('click', '#mycloselink', closeLinkClicked);
}

$(document).ready(function() {
                             $('#mydiv').load('page2.html', doneLoading);
                            });

page1.html 当然也有这个:

<div id="mydiv"> </div>

当我单击从 page2 加载到 mydiv 中的链接时,没有任何反应(我希望显示警报)。

我做错了什么?

谢谢 谢谢

【问题讨论】:

  • 你试过$('#myopenlink').click(function(evt){ evt.preventDefault(); $(this).dialog('close'); });吗?
  • 这也是question 吗?
  • 不知道是不是同一个问题。我尝试了建议的解决方案,但没有帮助。不确定该问题是在讨论在框中加载 .html 页面还是只是将 HTML 注入其中。

标签: jquery jquery-ui


【解决方案1】:

你好喜欢这个 demo http://jsfiddle.net/mhLc5/6/ 或更新答案 => 这个http://jsfiddle.net/Pb2eR/ http://jsfiddle.net/Pb2eR/1/

动态追加演示:http://jsfiddle.net/Pb2eR/13/

所以要关闭对话框,您只需致电.dialog('close') 休息,演示将为您提供一个很好的玩耍场所。

API 驻留在此处:http://jqueryui.com/demos/dialog/

好读:http://forum.jquery.com/topic/close-a-jquery-ui-dialog-from-the-inside

希望这会有所帮助!

代码

 buttons: {

            'Submit': function() {
                $Dialog_div.dialog('close');
            }

示例代码的其余部分

var $Dialog_div;

function fnOpenDialog() {
    $Dialog_div = $('<div id=\'ThisDialog\'>Hello Page 2</div>').prependTo('body');

    $Dialog_div = $('#ThisDialog').dialog({
        autoOpen: true,
        draggable: true,
        resizable: true,
        title: 'Dialog stack overflow HULK',
        modal: true,
        stack: true,
        height: ($(window).height() * 0.95),
        width: ($(window).width() * 0.9),

        buttons: {

            'Submit': function() {
                $Dialog_div.dialog('close');
            }

        }

    });

}

$('#ClickMe').click(fnOpenDialog);​

【讨论】:

  • 我想从加载页面中的 HTML 元素关闭对话框,而不是使用对话框按钮。
  • @AmirW 嗯,你的意思是;从父窗口元素关闭对话框?对不起,如果我听起来很厚重 - 我只是想确保这次我明白了,干杯!
  • @AmirW 不是来自对话框按钮而是来自子元素?是的?即对话框内的元素? B-)
  • 是的。我编辑了这个问题,现在可能更清楚了(并且更专注于问题)。
  • @AmirW 给你,伙计:jsfiddle.net/Pb2eR/13 现在我已经附加了这个按钮。希望这会有所帮助
【解决方案2】:

要在事件处理程序中真正关闭对话框,请使用:

$(this).closest('.ui-dialog-content').dialog('close');

它将遍历 DOM,从新加载的内容备份到原来的 div 中,现在有对话框包裹它。

我看不出您为实际注册事件而发布的代码有任何明显错误,但据我所知,这里根本不需要使用事件委托。

由于在.load 完成之前您不会执行注册,因此您可以在#mycloselink直接注册事件处理程序。

【讨论】:

  • 请查看已编辑的问题。我从问题中删除了对话框。看起来我的问题是动态生成的 HTML 事件处理程序中的基本问题。
  • 是的@AmirW 这是对的 :)) 我认为,如果你将使用 firebug,你可以检查元素并且你可以看到这一点,我希望你可以使用下面的演示,如果你愿意我可以删除我的帖子,干杯! :) +1
  • @AmirW 对,我在第一次阅读时错过了 - 所以你的实际问题是关于事件委托,而不是对话框?
  • @AmirW 我认为:jsfiddle.net/Pb2eR 是你想看我下面的帖子,是吗?
猜你喜欢
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
相关资源
最近更新 更多