2016-07-25 23 views
0

我正在使用jquery,我試圖聽取關閉對話框後可能如何打開,但我得到了多少處於打開狀態。 例如:如果我有4並且關閉一個,當我期望得到3時返回4,最後當我只有1打開時返回2,最後關閉最後一個返回1。在對話框中獲取錯誤的長度

我做對了嗎?我嘗試查看文檔並嘗試查找afterClose之類的內容,但沒有。

$(".test").dialog({ 
      autoOpen: false, 
      height: "auto", 
      width: "auto", 
      modal: true, 
      close: function(e){ 
       $(this).destroy(); 
       // This returns wrong lenght 
       console.log($('.test').length); 
       if($('.test').length === 1) { 
         console.log($('.test a').text()); 
       } 
      } 
}); 
+0

也許回調函數沒有等到模態完全關閉之後? – Blazemonger

+0

@Blazemonger任何方式來做到這一點? –

+0

請提供一個完整的,獨立的示例,重現您的問題,無論是在這裏還是在http://jsfiddle.net或http://codepen.io – Blazemonger

回答

1

你是如何得到這些數字?除非你破壞(「測試」)。長對話呼籲

$

總是要返回的DOM的測試類的數量。你是否使用.remove()或其他東西來刪除對話框?需要更多信息。

當您關閉對話框時,它不會將其從DOM中刪除。它只是隱藏它,你可以在頁面底部看到隱藏的html。使用多個對話框的正確方法是使用對話框的instances。但那個狗屎很複雜。發佈一些更多的代碼,特別是你如何設置你的html,以及如何刪除對話框。這個關閉事件會在窗口關閉時觸發,但在窗口隱藏之前,這允許您在兩個地方取消關閉事件,在關閉之前(通常用於某些驗證),並關閉(也許你在哪裏做一些物體或某物)。

+0

是的,即時消息對話框一旦關閉就會銷燬。 –

+0

這是非常重要的信息。包括下次。 在調用.destroy之後,請記下它們的數量。 destoryFunction(){ $(this).dialog('destroy'); $(「。test」)。length === 1 // etc. } –

0

嘗試改變jQuery選擇搜索可見項:

$(".test").dialog({ 
     autoOpen: false, 
     height: "auto", 
     width: "auto", 
     modal: true, 
     close: function(e){ 
      // This returns wrong lenght 
      console.log($('.test:visible').length); 
      if($('.test:visible').length === 1) { 
        console.log($('.test a').text()); 
      } 
     } 
}); 

Source

+0

我試了一下,但沒有奏效。 –

+0

@Blazemonger在窗口關閉之前正確執行它的功能。 –

+0

實際上並非如此。關閉後,關閉的對話不會被刪除。不知道爲什麼,但他們必須有理由選擇這樣做。 – sidonaldson

0
$(".test").dialog({ 
      autoOpen: false, 
      height: "auto", 
      width: "auto", 
      modal: true, 
      close: function(e){ 
       $(this).destroy(); 
       // This returns wrong lenght 
       console.log($('.test').length); 
       if($('.test').length === 1) { 
         console.log($('.test a').text()); 
       } 
      } 
});