2011-04-10 74 views
0

我已經嘗試了所有可能的想法來擺脫這個問題,我知道它的一個已知問題,但我怎麼能通過它,基本上jQuery ui不顯示對話框時叫了兩聲,使用jquery對話框不顯示第二次的內容

self.$popup.dialog("open"); 

我使用jQuery UI的1.8.9和jQuery 1.4.4

這裏是我的代碼:

self.$popup = $("#import_box_dialog").dialog({ 
     autoOpen: false, 
     title: 'Import Albums', 
     modal: true, 
     position: "top", 
     height: 600, 
     maxWidth: 800 , 
     minWidth: 400 , 
     show:"slide", 
     width :700, 
     "buttons": [ 
      { 
       text: "Import", 
       click: self.doImport 
      } 
     ] 
    }); 

我看到了另一個奇怪的事情是,對話框的內容被嵌入在外部DOM元素中。

我的對話框DOM結構是這樣的:import_box->

<div class="media_import_box" > 
    <div id="import_box_dialog"> 
     <ul id="media_content"></ul> 
    </div> 
</div> 

,並在當顯示第二次DOM樹是這個樣子

Bug DOM Tree

的 「import_box_dialog」 其實移動out of the「import_box」div,我不知道它是怎麼發生的,但是display屬性是none,當我再次調用對話框時它不會改變。

+0

該對話框位於'#import_box_dialog'上,但您的示例使用'#mydialogdiv',您確定要選擇正確的元素嗎? – 2011-04-10 11:34:18

+0

是的,我正在使用self。$ popup.dialog(「open」);要顯示對話框,它會首次打開,但第二次打不開。 – redDragonzz 2011-04-10 11:38:40

+0

是否正在創建'#import_box_dialog' ?,如果是的話,你確定你沒有創建多個? – 2011-04-10 11:44:05

回答

1

設法解決這個問題,這個問題是該計劃被一再造成不必要的div每當$("import_box_dialog").dialog()被調用。而且,由於$操作符返回ü所有div的匹配給定的條件,即在這種情況下ID,因此內容並沒有成爲明顯的,我認爲這使得它混淆,有兩種方法來解決這個問題:

  • 通過調用$("import_box_dialog").child().remove()手動刪除Div這將刪除對話框中的所有其他Div
  • 使用變量來跟蹤用於該對話框的div,因爲我使用的是jquery類,所以我將它用於靜態變量。這樣,它跟蹤對話框,並始終在同一個div上創建對話框。

我想jquery會應用很多類風格,因爲在選擇正確的div時存在歧義,我想用一個靜態變量來解決它。

2
$(document).ready(function() { 
    var $dialog = $('<div></div>') 
     .html('This dialog will show every time!') 
     .dialog({ 
      autoOpen: false, 
      title: 'Basic Dialog' 
     }); 

    $('#opener').click(function() { 
     $dialog.dialog('open'); 
     // prevent the default action, e.g., following a link 
     return false; 
    }); 
}); 

Basic usage of the jQuery UI dialog

+0

嗨我也在做同樣的事情,你在做什麼,我不知道它爲什麼不顯示,我試圖關閉幻燈片效果,銷燬並重新初始化對話,每次它被稱爲,仍然沒有解決方案, – redDragonzz 2011-04-10 11:42:23

+0

這並沒有真正回答這個問題...... OP已經以更復雜的方式使用對話框了,這個問題與這個例子無關。 – 2011-04-10 11:43:23