2012-11-22 203 views
84

ダイアログが正常に機能しているjquery 1.5のアプリケーションがあります。 私は多くの.liveハンドラを持っていますが、これを.onに変更しました。 そのために、私はjquery(今は1.8.3、jquerui 1.9.1)を更新する必要があります。jquery uiダイアログ:初期化の前にダイアログのメソッドを呼び出すことはできません

は今、私が得た:

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> 

これが起こっかもしれない理由を任意のアイデア:Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

は、次のコードですか?

答えて

109

あなたはまた、行うことができます

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

代わりにこれを試してみてください:

ダイアログが $('#divDialog')に格納されていないためだ
var theDialog = $("#divDialog").dialog(opt); 
theDialog.dialog("open"); 

が、その場で作成してによって返される新しいdivの上.dialog(opt)機能です。

+4

これは私のために働いた。 これを開くか最初に開くときに毎回ダイアログを初期化する必要がありますか?多くのダイアログがあります。選択肢を初期設定してボタンでダイアログを開く方法はありませんか? – user1846096

+0

ボタンを1回クリックしてすべてのダイアログを開くには? –

+4

このソリューションでは、「初期化前にダイアログのメソッドを呼び出せません。ダイアログが正常に開かれ、閉じられた後にユーザーがダイアログを2回開こうとすると発生するメソッド 'open'」エラーを呼び出そうとしました時間。ありがとう@ZOD – spadelives

8

jqueryライブラリを更新しても、jqueryuiライブラリを並行して更新することなくこのエラーが発生しました。 jqueryui 1.9.0でjquery 1.8.3を使用していました。しかし、jquery 1.8.3を1.9.1に更新したところ、上記のエラーが発生しました。問題のある.closeメソッド行をコメントアウトすると、jquery 1.8.3で廃止され、jquery 1.9.1から削除された、jqueryライブラリに.browserが見つからないというエラーがスローされました。基本的には、jquery 1.9.1ライブラリはjquery ui 1.9.0ライブラリと互換性がありませんでしたが、jquery uiのダウンロードページはjquery 1.6+で動作していますが、基本的に、異なるバージョンの2つを使用しようとすると、報告されていないバグがあります。 jqueryuiのダウンロードにバンドルされているjqueryのバージョンを使用しているなら、うまくいくはずですが、妥協したパスから別のバージョンを使い始めると、このようなエラーが発生します。したがって、要約すると、このエラーは誤って一致したバージョン(私の場合はとにかく)からのものです。

+4

私のjquery UIバージョンを1.9.2にアップグレードすることでこの問題を解決し、それがうまくいった。したがって、jquery ui 1.9.2を使用したjquery 1.9.1では、上記のエラーが取り除かれます。 – 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'); 

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のクリックイベント:あなたのようなボタントリガのクリックを呼び出す部分ビューHTML内で、その後

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

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

yaを参照してください。

-2

ダイアログが初期化やページの準備が完了したとき、すぐにダイアログを開きたい場合は、私が代わりに親ビュー

+1

これはどういう意味ですか? – AaA

+1

これはあまり説明されていませんが、有効です。 MVCでは、私の部分的なビューのダイアログのためのdivタグが入っていました。含まれているdivタグを親ページに移動すると、ダイアログが正常に機能しました。 – Paulj

2

の部分図にdivタグを持っていたので、私はまた、あなたができる、このエラーメッセージが表示されましたダイアログのオプションオブジェクトにtrueにパラメータautoOpenを設定します。

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

したがって、あなたは `$(「#のdivDialog」)を呼び出す必要はありませんダイアログ(「開きます」);

ダイアログオブジェクトを初期化すると、ダイアログが自動的に開きます。

関連する問題