2013-04-08 83 views
0

我已经把我的jquery对话框内容放在div中。但每当我以这种方式初始化对话框时:生成多个jQuery UI对话框

$(".uof_add_form").dialog({ 
    autoOpen : false, 
    height : 500, 
    width : 600, 
    modal : true, 
    buttons : { 
    "Done" : function() { 
    $(this).close(); 
    } 
    } 
}); 

内容从我的div中删除。由于这个原因,我不能使用

$("#new_form").on("click",".add_level", function(){ 
     var wrapper_data = $(this).parent().parent().parent().parent(); 
     wrapper_data.find(".uof_add_form").dialog("open"); 

}); 

打开我的对话框。

由于我的内容是动态生成的,因此我需要使用$(this)

有什么方法可以让我的内容留在我的div里面?

我改变了我的代码来初始化上点击自己以这种方式对我的div做display:none: -

$("#new_form").on("click",".add_level", function(){ 
    var wrapper_data = $(this).parent().parent().parent().parent(); 
    wrapper_data.find(".add_level_pop").dialog({autoOpen : true, height : 500,width : 600,modal : true, buttons : { "Done" : function() { $(this).dialog('close'); } } }); 

}); 

对话框上的第一次点击,但在第二次点击对话框打开不会因为被解雇在对话框的初始化过程中内容已被传送到不同的地方。

我还增加了一个样品上的jsfiddlehere

回答

1

虽然我不确定我是否了解你最初的问题,但从看在你的小提琴的代码,你可能要考虑到:

  • 省略您选择的类限定符,当你已经有一个ID,这将坚持对话框元素,所以你总能找到在你的<div>DOMfiddle v3
  • <div>保存到一个变量上的负载,这样你就可以不用查询它的DOM(fiddle v4

在这两个更新版本的提琴的对话框中第二次点击打开访问它,如果那是w你正在寻找的帽子。希望能帮助到你。


当你试图解决一个更一般的情况下,我在another fiddle version相应地更新你的榜样。对话框div使用.data()函数保存在按钮上。要打开对话框,使用保存的对话框。

+0

对不起,不完全是我想要的,我不能做这个var $ dialog = $(“。包装#dialog“);因为我不知道什么是我的新生成的ID和它在哪个包装div它属于 – 2013-04-09 10:16:36

+0

但你应该知道什么'id'你有,并能够保存一个引用一个更动态的例子将有助于理解问题另一件事(尽管你说你不能使用那个部分):你不应该使用'.parent()'调用链,尝试使用jQuery的[ '.closest(selector)'](http://api.jquery.com/closest/) – Wolfram 2013-04-09 10:31:52

+0

请检查jsfiddle代码,我已经更新它了,请注意wrapper div是自动生成的 – 2013-04-09 10:35:43

0

使用.dialog()返回值作为手柄:

var handle = $(".uof_add_form").dialog({ 
[...] 
}); 

然后在某个时刻,

handle.dialog("open"); 
+0

我无法使用句柄,因为我的内容是动态生成的 – 2013-04-08 14:30:56

+0

是否可以在当前打开它的位置初始化对话框?即像'wrapper_data.find('uof_add_form')。dialog({...})'autoOpen:true'(并且没有原始对话框声明)? – hexblot 2013-04-08 14:36:54

+0

请检查我更新的问题,当我按照你所说的去做时会发生什么。 – 2013-04-08 14:57:16