如何获取jquery ui对话框对象?

如何获取jquery ui对话框对象?,jquery,jquery-ui,jquery-ui-dialog,Jquery,Jquery Ui,Jquery Ui Dialog,假设我打开了一个没有“id”的对话框,我怎样才能找到该对话框并获取对话框对象,这样我就可以在上面执行dialog('close') 范例 // say if this was my dialog <div> <input type="button" id="btn" /> </div> $("#btn").parents("div").dialog('close'); //如果这是我的对话框 $(“#btn”).parents(“div”).dia

假设我打开了一个没有“id”的对话框,我怎样才能找到该对话框并获取对话框对象,这样我就可以在上面执行dialog('close')

范例

// say if this was my dialog
<div> 
   <input type="button" id="btn" />
</div>

$("#btn").parents("div").dialog('close');
//如果这是我的对话框
$(“#btn”).parents(“div”).dialog(“close”);

但这不起作用,因此我需要获取实际对象。

这正是您应该在这些div上具有id的原因。考虑以下选项:

  • 考虑将id添加到标记中。这很容易做到和维护

  • 否则,在执行
    .dialog()
    之前,当您最初获取div时,请为它们指定动态id:
    el.attr('id','dialogBox')

  • 如果您不想给它们id(出于某种奇怪的原因),那么在js代码中的某个时间点上它们仍然存在,所以请保存对这些对象的引用。稍后,参考所需的参考,您可以调用
    .dialog('close')
    。这也将为您执行缓存,因此您不需要再次搜索DOM树

  • 作为最后一种手段,如果您不想执行上述操作,请使用与最初相同的方式引用它们(这并不总是一个好主意,尤其是在DOM发生更改时)


  • 尽管仅供参考,但您的示例(使用最后一个选项)仍然有效:

    为什么不使用按钮选项?允许您通过$(this.dialog('close')关闭


    还有,有没有理由不给部门一个id?无论如何,您必须以某种方式引用它来创建对话框。

    我相信找到与class
    ui对话框内容最接近的
    div
    应该可以:

    $("#btn").click(function() {
        $(this).parents("div.ui-dialog-content").dialog("close");
    });
    
    .ui对话框内容
    应用于原始的
    div
    ,然后将其包装在其他几个
    div
    中)


    下面是一个工作示例:

    只需找到当前活动元素的最近父元素,即对话框:

    var dialog = $(document.activeElement).closest("div.ui-dialog-content");
    

    如果有很多对话框都堆叠在一起,这很有用。请注意,通过jquery ui查找并关闭所有打开的jQueryUI对话框:


    $(“:ui对话框”)。对话框(“关闭”)

    只需保存jQuery从
    对话框返回的引用

    var magic=$('').html(“Ta da!”).dialog()

    然后,您可以稍后使用该引用再次打开弹出窗口:

    $(magic.dialog('open')

    完全删除它(连同生成的
    .parent
    包装):

    $(magic.parent().remove()

    您甚至可以通过使用
    close
    选项创建它(或稍后附加它),让它在关闭时删除自身:

    close:function(ev,ui){$(this.remove();}

    var-magic=null;
    函数createMagic(){
    magic=$('').html(“Ta da!”).dialog({
    莫代尔:是的,
    标题:“不是来自DOM”,
    按钮:[{
    单击:函数(){$(this).dialog(“close”);},
    文本:“关闭我”
    }],
    秀:假,,
    //关闭:函数(ev,ui){$(this.remove();}
    });
    updateMagicStatus();
    }
    函数showMagic(){
    $(magic.dialog('open');
    updateMagicStatus();
    }
    函数killMagic(){
    $(magic.parent().remove();
    updateMagicStatus();
    }
    函数updateMagicStatus(){
    $(#MagicStatus')。文本(魔法);
    $('#MagicPopStatus').text($('div.ui-dialog').length);
    }
    $(文档).ready(updateMagicStatus)
    
    
    创造一个神奇的模式
    

    显示神奇模态

    杀死魔法模态
    Magic对象当前为:

    jQUery UI弹出包装器:
    我正在使用选项3,但在这一情况下,我丢失了对象(我没有丢失它,但我不想将它放在全局变量中存储)。@chobo2,我没有提到“全局”这个词。除了全局变量之外,还有其他存储对象的方法,例如jQuery的
    .data()
    方法,或者更好的封闭局部变量。我知道您没有提到全局变量。我是说,我的情况下,这一个我可能需要使用它(可能有更好的方法,但我只是不知道他们)。我可以看看这个。data()不确定是什么。通常我只是传递dialog对象,但就像我在本例中所说的那样,我不能这样做。注意:如果两个对话框与此嵌套,则所有对话框都将关闭。添加
    :first
    仅关闭当前对话框:
    $(this).parents(“div.ui-dialog-content:first”).dialog(“close”)
    @RobW:或者,如果我正确理解问题,您可以使用
    最近的
    。在这里,我尝试了
    $(this)。parents('.ui dialog')。dialog('close')--太近了!如何设置该对话框变量的调整大小事件?