52

私は突然jQueryからこのエラーを受け取ります:

エラー:初期化の前にダイアログでメソッドを呼び出すことはできません。メソッド'close'を呼び出そうとしました

プラグイン

 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
 <script src="http://code.jquery.com/ui/1.9.1/jquery-ui.js"></script> 

jQueryコード

次の関数でこれらのメッセージを受け取ります。

$(document).ready(function() {
  if ($('#results').html().length != 0) {
    alert('has information');

    $('#dialog').dialog({
      modal: true,
      buttons: {
        Ok: function() {
          // If I use $(this).dialog($(this)).dialog('close'), the UI is displayed,
          // however I do not see the OK button and no errors 
          $(this).dialog('close');
        }
      }
    });
  } else {
    alert('has no data');
  }
});

HTML

<div id="dialog" title="Server Response">
  <p><span class="${icon}" style="float: left; margin: 0 7px 50px 0;"></span>
    <label id="results">${results}</label>
  </p>      
</div>
4

20 に答える 20

26

asp.net MVCで部分的なレイアウトのダイアログを開くときに、同様の問題が発生しました。このエラーが発生する原因となったメインページだけでなく、部分ページにもjqueryライブラリをロードしていました。

于 2014-03-19T14:22:31.333 に答える
22

ボタンが正しく宣言されていないようです(とにかく 最新のjQuery UIドキュメントによると)。

次のことを試してください。

$( ".selector" ).dialog({ 
   buttons: [{ 
      text: "Ok", 
      click: function() { 
         $( this ).dialog( "close" ); 
      }
   }]
});
于 2013-03-20T20:40:42.827 に答える
16

これを試してください-それは私のために働きます:

$(".editDialog").on("click", function (e) {
    var url = $(this).attr('href');
    $("#dialog-edit").dialog({
        title: 'Edit Office',
        autoOpen: false,
        resizable: false,
        height: 450,
        width: 380,
        show: { effect: 'drop', direction: "up" },
        modal: true,
        draggable: true,
        open: function (event, ui) {
            $(this).load(url);
        },
        close: function (event, ui) {
            $("#dialog-edit").dialog().dialog('close');
        }
    });

    $("#dialog-edit").dialog('open');
    return false;
});

それがあなたを助けることを願っています

于 2013-05-04T23:59:37.360 に答える
10

Imも同じエラーを受け取りました:初期化の前にダイアログでメソッドを呼び出すことはできません。メソッド'close'を呼び出そうとしました

私がしたことは、次のようなダイアログヘッダーにあるボタンを閉じるイベントをトリガーしたことです。

これは、ダイアログを閉じるために正常に機能しています

function btnClose() {
$(".ui-dialog-titlebar-close").trigger('click');
}
于 2014-09-11T10:44:24.640 に答える
9

$(this).dialog("close")万が一、Ajaxの「成功」コールバック内から呼び出されていますか?その場合は、次のように、通話context: thisのオプションの1つとして追加してみてください。$.ajax()

$("#dialog").dialog({
    modal: true,
    buttons: {
        Ok: function() {
            $.ajax({
                url: '/path/to/request/url',
                context: this,
                success: function(data)
                {
                    /* Calls involving $(this) will now reference 
                       your "#dialog" element. */
                    $(this).dialog( "close" );
                }
            });
        }
    }
});
于 2013-11-04T20:47:15.267 に答える
5

何らかの理由で、jQueryUIは定義時にボタンで定義されたすべてのコードを実行しようとするようです。クレイジーですが、同じ問題が発生し、この変更を行うと停止しました。

if ($(this).dialog.isOpen === true) { 
    $(this).dialog("close");
}
于 2015-02-24T15:57:01.867 に答える
3

1.10.2でも同じエラーが発生しました。私の場合、背景オーバーレイをクリックすると、ベースとなっている要素に関係なく、現在表示されているダイアログが非表示になります。したがって、私はこれを持っていました:

$('body').on("click", ".ui-widget-overlay", function () {
    $(".ui-dialog").dialog('destroy');
});

これは以前は機能していたので、ある時点でポップアップ自体で.dialog()を呼び出すためのJQUIのサポートを削除したに違いないと思います。

私の回避策は次のようになります。

$('body').on("click", ".ui-widget-overlay", function () {
    $('#' + $(".ui-dialog").attr('aria-describedby')).dialog('destroy');
});
于 2013-09-16T10:48:25.847 に答える
2

この問題は、他のすべてのダイアログボックスが完全に機能しているときに、1つのダイアログボックスがこのエラーをスローする前に一度発生しました。id="dialogBox"答えは、ページに同じ他のウェアを持つ別の要素があったためです。検索中にこのスレッドを見つけたので、これが他の誰かに役立つことを願っています。

于 2014-10-28T09:45:45.560 に答える
1

私は同じものに出くわし、私の解決策を共有したいと思いました:

<script type="text/javascript">
    $( "#dialog-confirm" ).dialog("option","buttons",
                {
                    "delete": function() {
                        $.ajax({
                            url: "delete.php"
                        }).done(function(msg) {
                         //here "this" is the ajax object                                       
                            $(this).dialog( "close" );
                        });

                    },
                    "cancel": function() {
                        //here, "this" is correctly the dialog object
                        $(this).dialog( "close" );
                    }
                });
</script>

「this」は非ダイアログオブジェクトを参照しているため、前述のエラーが発生しました。

解決:

<script type="text/javascript">
    var theDialog = $( "#dialog-confirm" ).dialog("option","buttons",
                {
                    "delete": function() {
                        $.ajax({
                            url: "delete.php"
                        }).done(function(msg) {
                            $(theDialog).dialog( "close" );
                        });

                    },
                    "cancel": function() {
                        $(this).dialog( "close" );
                    }
                });
</script>
于 2014-10-08T16:24:04.017 に答える
1

したがって、これを使用します。

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

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

ダイアログでMVC部分ビューを開くと、インデックスに非表示のボタンとJQUERYクリックイベントを作成できます。

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

次に、部分ビューhtml内で、ボタントリガークリックを次のように呼び出します。

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

じゃあ。

于 2015-01-07T11:48:44.130 に答える
1

これは、ajaxがページのコンテンツを置き換えていて、ダイアログの同じクラスの2つの要素で終わったときに発生しました。つまり、CSSクラスセレクターに基づいて実行されたダイアログを閉じる行で、1つではなく2つの要素が見つかりました。 2つ目は初期化されていませんでした。

$(".dialogClass").dialog("close"); //This line was expecting to find one element but found two where the second had not been initialised.

ASP.NET MVCの誰にとっても、これは、JavaScriptがメインコンテンツ領域のみを置き換えていたため、コントローラーアクションが、部分ビューを返すはずの要素を含む共有レイアウトページを含む完全ビューを返していたために発生しました。

于 2015-01-23T13:32:27.853 に答える
0

ダイアログ宣言の外でボタン配列を定義することで解決した同様の問題がありました。

var buttonArray = {};
buttonArray["Ok"] = function() { $( this ).dialog( "close" );}

オプションは次のようになります。

modal: true,
autoOpen: false,
buttons: buttonArray
于 2013-11-05T20:15:44.440 に答える
0

1時間後、私は最善のアプローチを見つけました。ダイアログの結果を変数に保存してから、変数のcloseメソッドを呼び出す必要があります。

このような:

var dd= $("#divDialog")
.dialog({
   height: 600,
   width: 600,
   modal: true,
   draggable: false,
   resizable: false
});

// . . .

dd.dialog('close');
于 2014-02-06T15:49:46.340 に答える
0

ダイアログ本体内のボタンを使用してダイアログを閉じようとすると、このエラーメッセージが表示されていました。$('#myDialog').dialog('close');動かなかったものを使ってみました。

私は最終的に、以下を使用してヘッダーの「x」ボタンのクリックアクションを実行しました。

$('.modal-header:first').find('button:first').click();  
于 2015-03-22T04:20:31.170 に答える
0

Senguttuvan:あなたの解決策が私のために働いた唯一のものでした。

function btnClose(){
  $( "。ui-dialog-titlebar-close")。trigger('click');
}

于 2015-05-15T22:27:44.823 に答える
0

私は同じ問題を抱えています、私はいくつかのダイアログを開きます私の問題はフォームデータが同じデータのままになるのを防ぐためにコンテンツを削除する必要があることでした、そしてダイアログはこれらのパラメータを作成します

var dialog = $("#dummy-1");

    dialog.html('<div style="position:absolute; top:15px; left:0px; right:0px; bottom:0px; text-align:center;"><img align="middle" src="cargando.gif"></div>');
    dialog.html(mensaje);
    dialog.dialog(
    {
        title:'Ventana de Confirmacion',
        width:400, 
        height:200, 
        modal:true,
        resizable: false,
        draggable:false,
        position: { my: "center center", at: "center center", of: window },
        buttons:
        [
            {
                text: "Eliminar",
                click: function() {
                    functionCall(dialog,var1,var2);
                }
            },
            {
                text: "Cerrar",
                click: function() {
                    dialog.dialog("close");
                }
            }
        ],
        close: function(event, ui)
        {
            dialog.dialog("close").dialog("destroy").remove();
        }
    });

ダイアログは、アクションを実行する関数にパラメーターとして渡されます。

    function functionCall(dialogFormulario,var1,var2)
{
    //same action 
        dialogFormulario.dialog("close");

}

ここでは、.dialog( "close")のみを使用する必要があり、.dialog( "destroy")は使用しないでください。これは、ダイアログがその関数closeを呼び出すためです。要素は存在しません。

于 2017-05-09T15:49:09.843 に答える
0

私も同様の問題を抱えていましたが、私の場合は問題が異なりました(Djangoテンプレートを使用しています)。

JSの順序が異なっていました(最初に確認するのはそれですが、そうではないとほぼ確信していましたが、そうでした)。ダイアログを呼び出すjsは、jqueryUIライブラリが呼び出される前に呼び出されました。

私はDjangoを使用しているので、テンプレートを継承し、{{super.block}}を使用してブロックからテンプレートにもコードを継承していました。問題を解決したブロックの最後で{{super.block}}を移動する必要がありました。ダイアログを呼び出すjsは、Djangoのadmin.pyのMediaクラスで宣言されました。私はそれを理解するために1時間以上を費やしました。これが誰かを助けることを願っています。

于 2017-09-14T04:56:32.530 に答える
0

特定のオブジェクトIDを使用してダイアログを閉じるために呼び出すことができる別のJavaScript関数を作成し、次の$(document).ready()ように関数を外部に配置します。

function closeDialogWindow() { 
$('#dialogWindow').dialog('close');
}

注:関数は外部で宣言する必要があります。$(document).ready()これにより、jQueryは、DOMで作成される前に、ダイアログでcloseイベントをトリガーしようとしません。

于 2019-04-02T17:56:18.370 に答える
0

ダイアログの外でボタンの内容を宣言したい場合があります。これは私にとってはうまくいきます。

var closeFunction = function() {
    $(#dialog).dialog( "close" );
};

$('#dialog').dialog({
    modal: true,
    buttons: {
        Ok: closeFunction
    }
});
于 2019-05-08T13:28:37.780 に答える
0

これは非常に古いことは知っていますが、角度のあるルートをナビゲートする必要があり、ダイアログが開いているときに同じ問題が発生しました。ダイアログは開いたままです。そこで、ルートコントローラデストラクタでcloseメソッドを呼び出すための回避策を取得しました。ただし、ダイアログが開いていない場合は、上記のエラーが発生します。したがって、答えは、初期化の前にダイアログを閉じている場合、このエラーが発生するということです。ダイアログが開いているかどうかを確認するには、ダイアログを閉じて、この状態で閉じた状態をラップします。

if($('#mydialog').dialog('isOpen')) { //close dialog code}
于 2019-05-09T03:46:15.880 に答える