1

jQuery UI ダイアログ内に AJAX によってロードされた jqGrid があります。閉じていないダイアログを除いて、すべてが正常に機能しています。両方のボタンをクリックすると、アラートが表示されますが、ダイアログが閉じられません。

buttons: {
    'Confirm': function() {
        alert('OK Confirm');
        $('#test-grid').dialog('close');
    },
    'Cancelar': function() {
        alert('OK Cancel');
        $(this).dialog('close');
    }
}

$('#test-grid').dialog('close')とを試しまし$(this).dialog('close')たが、誰も機能しません。AJAX によってロードされた jqGrid を削除すると、すべて正常に動作します。Firefox と Chrome のエラー コンソールは空です。

jqGridページを次のものでロードしています:

$('#test-grid').load('/grid').dialog('open');

誰でも私を助けることができますか?

アップデート

AJAX を使用して単純な HTML スニペットをロードしようとしましたが、問題が解決しません。

4

1 に答える 1

1

問題は、への呼び出しloadがダイアログを開くための呼び出しに干渉していることです。これは、AJAX コンテンツを の子要素にロードすることで修正できますtest-grid。例えば:

 $('#test-grid-child').load('/grid');
 $('#test-grid').dialog('open');


アップデート

のドキュメントをload読んで、もう少し考えてみました。コード$('#test-grid').load('/grid').dialog('open');が実行されると、AJAX リクエストが開始され、ダイアログがすぐに作成されます。しかし、loadの AJAX リクエストが完了すると、jQuery が戻ってきて、 の内容を上書きします#test-grid。これは、下にあるマークアップがダイアログ オブジェクトの下から変更されているため、ダイアログを閉じることができなかった理由を説明しています。

子要素にデータを取得すると、この問題が解消されます。これはloaddialogそれぞれが DOM の異なるセクションを操作するようになったためです。

AJAX リクエストが完了するまでに時間がかかる場合はcomplete、ユーザーにフィードバックを提供する機能を実装することを検討することをお勧めします。たとえば、データの準備が整うまでスピナーを表示します。例えば:

$('#test-grid-child').load('ajax/test.html', function() {
  alert('Load was performed.'); // Perform any necessary UI action here
});

とにかく、あなたがおそらく必要としていたよりも多くの情報ですが、私はこの質問がまだ私の心に新鮮なうちに更新したかったのです...

于 2012-06-18T21:12:18.597 に答える