2013-04-08 49 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