2012-11-05 75 views
1

我有一個簡單的JQM(V 1.1.0)列表視圖,其中的ajax調用附加到列表中的每個項目。當用戶點擊其中一個列表項時,對話框後面的頁面會更新爲他們點擊的項目。ajax調用後,jQuery Mobile對話框將不會關閉

問題是,當用戶點擊列表項時,對話框不會關閉。如果我使用對話框標題中的(X)關閉按鈕,對話框將關閉,並且對話框後面的頁面已按預期更新。

這裏是我的代碼:

$('body').on('tap', 'a.element', function(event) { 

//START LOADING ANIMATION 
$.mobile.showPageLoadingMsg(); 

//GET URL FROM MARKUP 
bpm.url = $(this).attr('href'); 

$.get(bpm.url, 
    function(data, result) { 
     if(result == 'success') { 

      //STOP LOADING ANIMATION 
      $.mobile.hidePageLoadingMsg(); 

      bpm.dataStorage = $(bpm.remoteAppDivName).html(data); 


      bpm.dataStorage.trigger('create'); 


     }  
    }, 
    'html' 
); 

//PREVENT DEFAULT BUTTON BEHAVIOR 
event.preventDefault(); 

}); 

預先感謝任何幫助!

回答

1

您需要在result == 'success'內撥打$(<dialog element>).dialog('close');

$.get(bpm.url, 
    function(data, result) { 
     if(result == 'success') { 

      //STOP LOADING ANIMATION 
      $.mobile.hidePageLoadingMsg(); 

      bpm.dataStorage = $(bpm.remoteAppDivName).html(data); 


      bpm.dataStorage.trigger('create'); 

      $('#dialogBox').dialog('close'); 
     }  
    }, 
    'html' 
); 
+0

感謝名單這個解決方案。我在iPhone 3GS和iTouch 4上遇到了問題,您的解決方案幫助我解決了這個問題。我最初在'bpm.dataStorage.trigger('create');'後面嘗試了'$('。ui-dialog')。dialog('close');',但那不起作用。針對元素直接解決它! – haddnin

1

實際上並沒有告訴對話框關閉代碼中的任何位置,這就是爲什麼它不是。 jQuery的不能假設,僅僅因爲你以某種方式對話框交互,你希望它關閉...

試着這麼做:

$.get(bpm.url, 
    function(data, result) { 
     if(result == 'success') { 

      //STOP LOADING ANIMATION 
      $.mobile.hidePageLoadingMsg(); 

      bpm.dataStorage = $(bpm.remoteAppDivName).html(data); 
      bpm.dataStorage.trigger('create'); 

      bpm.closest('.ui-dialog').dialog('close'); 
     }  
    }, 
    'html' 
); 
+0

如果你在一個頁面上有多個對話框,這個'bpm.closest('。ui-dialog')。對話框('close');'如果你沒有調用最接近的對話框可能會導致一個問題。 – Bot

+1

他將事件直接綁定到駐留在對話框上的一組控件。因此,'item.closest('。ui-dialog')'調用將找到這些項目所在的父對話框。除非事件在對話框中的對話框中觸發,否則這不會導致問題 - 即使這樣,它也會簡單地關閉兩者中的最內層(可能是所需的功能)。 –

+0

@TroyAlford感謝您的快速響應!使用jQuery Mobile,您可以假設對話框將通過點擊列表項來關閉。這已經在我的8個測試設備中的6個和桌面版Chrome上運行。您處在正確的軌道上,但Bot的解決方案解決了這兩個問題設備的問題。我喜歡他的解決方案,因爲我可以直接關閉目標對話框。我正在使用DOM中的2個對話框。 – haddnin