【问题标题】:jQuery Mobile dialog won't close after ajax callajax 调用后 jQuery Mobile 对话框不会关闭
【发布时间】:2012-11-05 19:59:46
【问题描述】:

我有一个简单的 JQM (V 1.1.0) 列表视图,列表中的每个项目都附加了一个 ajax 调用。当用户点击其中一个列表项时,对话框后面的页面会更新为他们点击的项目。

问题是当用户点击列表项时对话框没有关闭。如果我在对话框标题中使用 (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();

});

提前感谢您对此提供的任何帮助!

【问题讨论】:

    标签: jquery ajax mobile dialog


    【解决方案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'
    );
    

    【讨论】:

    • 感谢这个解决方案。我在使用 iPhone 3GS 和 iTouch 4 时遇到了问题,您的解决方案帮助我解决了这个错误。我最初在bpm.dataStorage.trigger('create'); 之后尝试了$('.ui-dialog').dialog('close');,但这没有用。定位元素直接解决了!
    【解决方案2】:

    您实际上并没有告诉对话框在代码中的任何位置关闭,这就是它没有关闭的原因。 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'
    );
    

    【讨论】:

    • 如果您在一个页面上有多个对话框,如果您没有调用最近的一个,这个bpm.closest('.ui-dialog').dialog('close'); 可能会导致问题。
    • 他将事件直接绑定到一组位于对话框中的控件。因此,item.closest('.ui-dialog') 调用将找到这些项目所在的父对话框。除非在对话框中的对话框中的项目上触发事件,否则这不会导致问题 - 即使那样,它也会简单地关闭两者中最里面的部分(可能是所需的功能)。
    • @TroyAlford 感谢您的快速响应!使用 jQuery Mobile,您可以假设对话框将通过点击列表项来关闭。这已经在我的 8 台测试设备中的 6 台和桌面 Chrome 上运行。您在正确的轨道上,但 Bot 的解决方案解决了 2 台有问题的设备的问题。我喜欢他的解决方案,因为我可以直接关闭目标对话框。我正在处理 DOM 中的 2 个对话框。
    • 啊,不错。 :) 很高兴知道!很高兴您找到了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多