2012-11-05 47 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