2013-09-28 175 views
0

我有很奇怪的行爲,我在我的本地使用該如何關閉對話框

 $.ajax({ 
     url: "", 
     data  : { }, 
     type  : "POST", 
     dataType : "text", 
     cache : false, 
     success: function(response) { // on success.. 
     }, 
     complete : function() { 
      $("#dialogDiv").dialog("close"); 
      $("#dialogDiv").dialog("destroy"); 
      $("#dialogDiv").remove(); 
     }, 
     error : function(errMsg) 
     { 

      console.log("AJAX : submit : error"); 
      console.log(jsonToString(errMsg)); 
     } 
    }); 

但我的問題是它有時近,有時不關閉對話框Ajax調用完成事件服務器,並且很多時候它不能用於生產服務器,我真的無法找出問題所在。有沒有辦法強制關閉完整的窗口?還是其他什麼?

+0

有在控制檯中的任何錯誤? –

+0

沒有。在控制檯 – commit

回答

1

檢查你的源代碼,並確保你沒有彈出多個對話框。由於您使用的是id,因此jQuery只會對與匹配的id匹配的第一個DOM元素(因爲id應該是頁面唯一)執行操作。

如果你想關閉所有對話框的話,我建議把你的$("#dialogDiv")class,並使用類選擇.這樣$(".dialogDiv")

最後,你應該緩存您的選擇,甚至更好地利用chainingQuick Guide: Chaining in Jquery

緩存例如:

var $dialogDiv = $('#dialogDiv"); // use the $ in the var to say -- Hey this is a jQuery object 
$dialogDiv.dialog("close"); 
$dialogDiv.dialog("destroy"); 
$dialogDiv.remove(); 

,如果你需要多次重複使用的選擇,這非常有用。否則,你迫使JavaScript爲同一個元素重新分析整個DOM結構。

鏈接示例:

$("#dialogDiv").dialog("close").dialog("destroy").remove(); 

這適用因爲jQuery執行動作之後返回一個對象。你可能不需要closeremove在這種情況下,因爲destroy應該照顧它,但我沒有他們沒有太多的例子。

+0

+1中沒有任何錯誤能很好地解釋所有情況。 – commit

1

我找到了解決方案,很奇怪的行爲,但它是工作,而不是在complete的項目?我關閉它在done事件關閉彈出窗口,並且它正在

$.ajax({ 
     url: "", 
     data  : {}, 
     type  : "POST", 
     dataType : "text", 
     cache : false, 
     success: function(response) { // on success.. 

     }, 
     complete : function() { 

     }, 
     error : function(errMsg) 
     { 
      console.log("AJAX : submit : error"); 
      console.log(jsonToString(errMsg)); 
     } 
    }).done(function() { 
     $("#dialogDiv").dialog("close"); 
     $("#dialogDiv").dialog("destroy"); 
     $("#dialogDiv").remove(); 
    });