2016-10-17 139 views
0

我正在使用對話框將新用戶添加到數據庫,如果驗證通過並且用戶成功保存,我想關閉對話框。請指教如果Ajax成功關閉對話框

$('.add_user_link a').each(function() { 

      var $link = $(this); 
      var $dialog = $('<div id="dialog"></div>') 
       .load($link.attr('href') + ' #content') 
       .dialog({ 
        autoOpen: false, 
        title: $link.attr('title'), 
       }); 

      $link.click(function() { 

       $dialog.dialog('open'); 

       $('#add_user').submit(function() { 

        url = '/user/useradd/'; 
        $.ajax({ 
         type: "POST", 
         cache: false, 
         url: $('#add_user').attr('action'), 
         data: $('#add_user').serializeArray(), 

         success: function (data) { 

          var json_obj = $.parseJSON(data); 
          var result = json_obj['result']; 
          var lname = json_obj['lname']; 
          var email = json_obj['email']; 
          var fname = json_obj['fname']; 

          if (!result) { 

           $("#dialog").dialog('close'); 
          } 
          else { 
//        
           document.getElementById('email-error').innerHTML = email; 

           var fname_count = $("label[id*='errorfname']").length; 

            $('input[name=fname]').after('<label id="errorfname"></label>'); 
            document.getElementById('errorfname').innerHTML = fname; 



           var lname_count = $("label[id*='errorlname']").length; 
           if (lname_count == 0) { 
            $('input[name=lname]').after('<label id="errorlname"></label>'); 
            document.getElementById('errorlname').innerHTML = lname; 
           } 




          } 



         } 


        }); 
        return false; 
       }); 
       return false; 
      }); 
     }); 

我得到這個錯誤

jquery-1.11.1.min.js:2 Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

回答

1

替換:

$("#dialog").dialog('close'); 

隨着

$dialog.dialog('close') 

你已經爲您的對話框中的變量應該在範圍內的點擊功能所以你不需要重新選擇它。

更新: 元素ID應該是唯一的,所以如果存在多個鏈接,您應該在添加鏈接時使對話ID唯一。否則,當有多個鏈接時,當您執行$('#dialog')時,您將選擇多個對話框元素。

當你這樣做:

$dialog = $('<div id="dialog"></div>') 

的ID值 「對話框中的」 應該是獨一無二的,像 「dialog1」, 「dialog2」 等

+0

它的工作原理。但是當我重新打開對話框時,它帶有舊數據。我怎樣才能打開沒有充滿數據 –

+0

這是鏈接的div標籤=「add_user_link」>Add New User

+0

您需要重置對話框的內容,如果這是應該發生的。 – Silkster