jQuery Mobile 面板导航冻结/挂起

Posted

技术标签:

【中文标题】jQuery Mobile 面板导航冻结/挂起【英文标题】:jQuery Mobile Panel Navigation freezing/hanging 【发布时间】:2016-10-28 04:41:03 【问题描述】:

我遇到了一些我无法在网络上找到相关文档的问题。

问题是导航菜单有时会在浏览页面后自行挂起。它经常发生,所以你应该可以通过访问我放置的临时站点来复制它:https://infinite-temple-73811.herokuapp.com

尝试从一个页面导航到另一个页面并重复,点击几次后应该会发生。

我不确定为什么会发生这种情况,但我怀疑这与菜单项 'Snabba frågor''Topplistan' 有关 发起 AJAX 调用。

另外值得注意的是它是一个单独的 html 文件。

我执行如下 AJAX 调用

$(document).delegate('#startQuiz', 'click', function () 
    $.ajax(
        headers: 
            'Accept': 'application/json',
            'Content-Type': 'application/json'
         ,
         type: 'GET',
         url: '/quickQuiz',
         async: false,
         success: quizStarted,
         fail: onFail,
         statusCode: 
             401: function () 
                 $.growl.error(message: "Error vid validate...");
             
        
    ).done(function () 
        console.log('Login Ajax done!');
    );
);

而且,quizStarted 方法如下所示:

var quizStarted = function (data, textStatus, xhr) 
    console.log("Validate done.");

    var result = jQuery.parseJSON(data);

    $('#imagePath').attr("src", result.image);
    $('#quickQuestion').text(result.question);
    $('#quickOne').text(result.quickOne);
    $('#quickTwo').text(result.quickTwo);
    $('#quickThree').text(result.quickThree);
    $('#quickFour').text(result.quickFour);
    $('#currentPoints').text(result.points);
    location.href = "#quickQuiz"; 

在后端,一切似乎都很好,只是导航面板挂了。其他一切都在发生时保持响应。

EDIT1: 面板代码:

<div data-role="panel" id="panel" data-position="right" data-display="reveal" class="ui-btn-right">
    <h2>Meny</h2>
    <ul data-role="listview">
        <li data-icon="home"><a href="#home">Home</a></li>
        <li><a id="startQuiz">Snabb frågor</a></li>
        <li><a id="displayHighscore">Topplistan</a></li>
        <li class="adminPage"><a href="#admin">Admin</a></li>
        <li class="login"><a href="#dologin">Login</a></li>
        <li class="logout" data-icon="delete"><a id="logoutBut">Logout</a></li>
    </ul>
</div>

EDIT2:

经过进一步调查,我实际上不再相信它与 AJAX 调用有关。因为如果您只是在 HomeLogin 之间导航,它仍然会发生,它们不会初始化任何 AJAX 调用。

【问题讨论】:

面板的ID在所有页面都相同?在主播中,您错过了#,例如href="#startQuiz". 面板 ID 是一样的。省略的 href 用于之前需要 AJAX 调用的页面,导航在 ajax 调用之后完成,location.href="#..." 之后。 您的问题是由于在所有面板上使用相同的 ID 造成的。如果面板在所有页面上都相同,则使用外部面板 (***.com/a/21857463/1771795) 或为每个面板使用唯一 ID。要在页面之间切换,请使用$.mobile.pageContainer.pagecontainer("change", "#page ID or URL") (***.com/a/19186330/1771795) 【参考方案1】:

Omar 的评论帮我解决了这个问题。

我没有在每个页面内使用许多具有相同 ID 的面板,而是改为使用外部面板。现在效果好多了。

【讨论】:

以上是关于jQuery Mobile 面板导航冻结/挂起的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Mobile 面板

jQuery Mobile 面板

jQuery Mobile面板宽度

来自 jQuery Mobile 的面板

JQuery Mobile面板 - 丢失内容调用.trigger(“创建”)

JQuery Mobile 1.4.5 右面板动画