2012-11-22 73 views
84

我有一個應用程序jquery 1.5與對話框工作正常。 雖然我有很多.live處理程序,但我將其更改爲.on。 爲此,我必須更新jquery(現在1.8.3和jquerui 1.9.1)。現在jquery ui對話框:無法在初始化之前調用對話框上的方法

,我得到:Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

以下是代碼:

的Javascript

var opt = { 
     autoOpen: false, 
     modal: true, 
     width: 550, 
     height:650, 
     title: 'Details' 
}; 

$(document).ready(function() { 
$("#divDialog").dialog(opt); 
    $("#divDialog").dialog("open"); 
...  

HTML代碼

<div id="divDialog"> 
<div id="divInDialog"></div> 
</div> 

任何想法,爲什麼這可能發生?

回答

109

試試這個

$(document).ready(function() { 
    $("#divDialog").dialog(opt).dialog("open"); 
}); 

你也可以這樣做:

var theDialog = $("#divDialog").dialog(opt); 
theDialog.dialog("open"); 

這是因爲該對話框不是存儲在$('#divDialog'),但其動態創建和返回一個新的div .dialog(opt)函數。

+4

這對我有用。 每當我想打開它或者只是第一次時,我是否必須初始化對話框?有很多對話。沒有辦法設置選項initiali,然後打開按鈕的對話框? – user1846096

+0

你想用一個按鈕點擊打開所有的對話框? –

+4

我發現這個解決方案也解決了「初始化之前無法調用對話框上的方法;試圖調用方法'open'」錯誤,當對話框成功打開,關閉,然後用戶嘗試打開對話框時發生時間。謝謝@ZOD – spadelives

8

我得到這個錯誤,當我只更新jquery庫而不更新jqueryui庫並行。我用jqueryui 1.9.0使用jquery 1.8.3。然而,當我更新jQuery 1.8.3到1.9.1時,我得到了上述錯誤。當我注意到有問題的.close方法行時,它會拋出一個關於在jQuery庫中找不到.browser的錯誤,該庫在jQuery 1.8.3中已棄用並從jquery 1.9.1中移除。所以基本上,儘管jquery ui下載頁面聲稱它可以與jquery 1.6+兼容,但jquery 1.9.1庫與jquery ui 1.9.0庫不兼容。本質上,當試圖使用兩者的不同版本時,存在未報告的錯誤。如果你使用jqueryui下載的jquery版本,我相信你會沒事的,但是當你開始使用不同的版本時,你會離開這條路徑並得到類似的錯誤。所以,總之,這個錯誤來自錯誤的版本(無論如何我都是這樣)。

+4

我解決了這個問題,我也升級了我的jQuery UI版本到1.9.2然後它工作。所以,jQuery 1.9.1與jQuery UI 1.9.2擺脫了上述錯誤。 – johntrepreneur

12

如果您不能升級jQuery和您得到:

Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close' 

你可以解決它,像這樣:

$(selector).closest('.ui-dialog-content').dialog('close'); 

或者,如果你控制的觀點,知道沒有其他的對話應該在在整個頁面上使用,你可以這樣做:

$('.ui-dialog-content').dialog('close'); 

我只會建議做th是否使用closest會導致性能問題。有可能有其他方法來解決它,而不是在所有對話框上進行全局關閉。

0

這也是一些變通:

$("div[aria-describedby='divDialog'] .ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-icon-only.ui-dialog-titlebar-close").click(); 
1

所以你使用這樣的:

var theDialog = $("#divDialog").dialog(opt); 
theDialog.dialog("open"); 

,如果你打開對話框中的一個MVC局部視圖,您可以在索引創建一個隱藏按鈕, JQUERY點擊事件:

$("#YourButton").click(function() 
{ 
    theDialog.dialog("open"); 
    OR 
    theDialog.dialog("close"); 
}); 

然後在部分視圖中html你調用按鈕觸發點擊像:

$("#YouButton").trigger("click") 

請參閱ya。

-2

我得到這個錯誤消息,因爲我有局部視圖,而不是父視圖div標籤

+1

這究竟意味着什麼? – AaA

+1

這是很難解釋,但有效。在MVC中,我在部分視圖中使用了包含對話框的div標籤。當我將包含div標籤移動到父頁面時,對話框正常運行。 – Paulj

2

如果你想立即打開對話框,當對話框初始化或頁面已準備就緒,你也可以在對話框中的選項對象的參數autoOpen設置爲true

var opt = { 
     autoOpen: true, 
     modal: true, 
     width: 550, 
     height:650, 
     title: 'Details' 
}; 

因此,你不必叫`$(「#divDialog」)對話框(「開放」)。

當對話框對象被初始化時,對話框會自動打開。

相關問題