21

私はjquery uiダイアログを使用しています。jquery uiのWebサイトからダウンロードします。バージョンはjquery-ui-1.10.2.custom.min.jsで、jqueryはjquery-1.9.1.jsで、jquery ui jsにバンドルされていますが、今、私は質問に遭遇しています:ダイアログが開いて保存ボタンをクリックすると、ダイアログを閉じたいのですが、ここに私のコードがあります:

$(function(){
 $("#dialog-form").dialog({
     autoOpen: false,
     height: 350,
     width: 450,
     modal: true,
     buttons: {
       "save": function() {
           if(!checkDept()){
               return ;
           }
           $.post('dept_save.do', 
                 {'dept.deptId':$("#dialog_dept_deptId").val(), 
                  'dept.deptName':$("#dialog_dept_deptName").val(),
                  'dept.manager':$("#dialog_dept_manager").val(),
                 },function(data, status, xhr){
                     if(status == 'success'){
                         alert('save success');
                         $(this).dialog("close");
                     }else{
                         alert('error:'+data);
                     }
                  }
                 ,"json");
       }
     },
     close: function() {
         $(this).dialog("close");
     }
   });

     /* to open dialog*/
    $("#add").click(function(){
        $("#dialog-form").dialog("open");
    });

「成功を保存」ポップアップダイアログを閉じると、dialog-formダイアログが閉じられず、エラーが発生します。

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

そして別のエラーがあります:

キャッチされない SyntaxError: Unexpected token o jquery-1.9.1.js:541

ありがとう。

4

6 に答える 6

33

の中にいると、 のコンテキストが失われthisます$.post()。$.post の前に、その保存ボタン関数this内の変数にコンテキストを保存します。

$('#dialog-form').dialog({
     // .....
     buttons: {
        'save': function() { 

            var $this = $(this); 
                      // -this- is still the original context 
                      // of $("#dialog-form")

            $.post({
               /// ...
               $this.dialog('close'); // <-- used here
            });
        }       
    }
});
于 2013-03-19T14:18:58.887 に答える
10

メソッドを呼び出してダイアログを初期化すると.dialog(options)、新しいダイアログが作成されますが、ダイアログに変換する元の div (サンプル コードの '#dialog-form') には関連付けられません。このdialog(options)関数は、ダイアログ データを含む要素を返します。したがって、次のようにすると:

var myDialog = $("#dialog-form").dialog(options);

次に、次のように open メソッドを呼び出すことができます。

myDialog.dialog('open');

ダイアログを含む要素を見つけたい場合は、「ui-dialog-content」クラスの最も近い div です。

var myDialog = $('#dialog-form').closest('div.ui-dialog-content');

ダイアログ データは、uiDialogこの要素データを見るとわかるデータです。

myDialog.data();
于 2013-06-19T13:50:19.360 に答える
4

$(this)内のダイアログを対象としていない$.postため、参照を保存する必要があります。

var self = this; // add this
$.post(..., function(){
    $(self).dialog("close"); // modify this to use self
于 2013-03-19T14:18:38.250 に答える
2

ダイアログを閉じるには、次のことを行う必要がありました。

 $("#Note").dialog({
        autoOpen: true,            
        modal: true,
        create: function (e, ui) {
          //
        },
        open: function () {
            //
        },            
        buttons: {
                //
                $(".ui-dialog-titlebar-close").trigger('click');
            }
        }
    });
于 2016-03-14T04:43:45.527 に答える
0

ダイアログの代わりにポップアップを使用した可能性があります。両者の締め方は違うと思います。使ってみて$("#popid").popup('close');

于 2014-06-23T17:12:03.257 に答える