2010-01-18 25 views
0

我有頁面A使用AJAX調用頁面B.頁面B將被放在頁面A中的div容器中。在結果(頁面B)中,有一個代碼將啓動一個jQuery UI對話框。對話框的div也在頁面B.但是,它不起作用。我必須將啓動代碼放在頁面A.所以,如果我想在頁面B中放置啓動代碼,我該怎麼做?從AJAX調用結果啓動jQuery UI對話框

的啓動代碼:

 

$('#dialog').dialog({ 
    bgiframe: true, 
    autoOpen: false, 
    width: 300, 
    height: 300, 
    modal: true, 
    resizable: false,   
    buttons: { 
     'Create an account': function() { }, 
     Cancel: function() { } 
    }, 
    close: function() { } 
}); 

我使用$('div.dialog')的選擇也試過(改ID爲class)和它的工作,但每次我請求頁面B(無重新加載頁面A),對話框會相乘。例如,我第一次請求Page B時,會打開一個對話框。我第二次請求B頁時,將打開兩個對話框。

回答

1

你的做法已經不遠了,你只是複製對話框上的電話,每次加載的時候,所以destroy the previous one,所以不是這樣的:

$('div.dialog').dialog({ ...options... }); 

調用此:

$('div.dialog').dialog('destroy').dialog({ ...options... }); 

這可以防止爲同一元素實例化多個對話框。或者,您可以檢查該元素在已創建的對話框的是,像這樣的:

$('div.dialog').filter(function() { 
    return $(this).closest('.ui-dialog').length === 0; 
}).dialog({ ...options... }); 

這隻能在尚未包裹在一個對話框<div class="dialog">元素創建對話框。

0

你可以使用jQuery live函數來實現自定義事件綁定。 每次調用頁面B時,都必須觸發自定義事件,以便新的對話框元素可以綁定到事件處理程序中。如果您遵循此方法,則啓動代碼必須仍在頁面A中。