57

instancejQuery UI Dialog ウィジェットが初期化されているかどうかをテストするメソッドを使用したいと思います。APIに関しては、これは可能ですが、私にはうまくいきません:

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

デモ: http://jsfiddle.net/mDbV7/

アップデート:

これはドキュメントの誤りでした。instanceメソッドはバージョン 1.11.0 から利用可能になります。この問題を参照してください。

4

7 に答える 7

92

jQuery UI の最新バージョンでは、まだ初期化されていない項目で UI メソッドを呼び出すことができなくなりました。次のように、if ステートメントでそれらをラップしています。

if ($("#divToBeDialoged").hasClass('ui-dialog-content')) {
    // do whatever
} else {
    // it is not initialized yet
}

編集:クラス名を変更しました、@dmncに感謝します

于 2013-04-02T12:20:25.957 に答える
20

ダイアログを使い終わったら、ダイアログを空にして破棄するのも良い習慣です。私は通常、各ダイアログの閉じるイベントでこのコードを使用します

$("#myDialog").dialog({
    // other options
    close: function(event, ui) {
        $(this).empty().dialog('destroy');
    }
}

ダイアログがインスタンスに存在するかどうかを毎回尋ねるのではなく、各ダイアログが自動的にクリーンアップされるようにするのが私のアドバイスです。

于 2013-09-05T05:18:54.333 に答える
5

以下を使用できます。

if($('#id').is(':ui-dialog')) {
}

また

    var obj = $('<div>test</div>').dialog();
    if (obj.is(':ui-dialog')) {
      alert('I\'m a dialog')
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>

于 2015-09-23T09:32:31.587 に答える
1

jQuery UI の場合 - v1.10.3

if($( "#myDialog" ).is(':data(uiDialog)')){//is(':data(dialog)') does not work
    //Dialog exist
}
于 2014-10-30T05:48:55.417 に答える
1

この例のように、HTML コードの既存の ID からそのダイアログを作成している場合:

$('#main').dialog({});

動作するように生成された親要素dialog()にクラスを追加することに注意してください。要素で、によって追加されるクラスは次のとおりです:および(jquery-ui-1.9.2)。したがって、この場合、@jbabey の例に従って、次のようにして既存のダイアログを確認できます。ui-dialog<div>#maindialog()ui-dialog-contentui-widget-content

if ($('#main').hasClass('ui-dialog-content')) {
    // do whatever
}
于 2013-08-29T12:51:23.980 に答える
0

別の方法は

$('.element').is(':data(dialog)');
于 2013-04-02T12:29:49.743 に答える