刷新后jQuery后退按钮无法正常工作

时间:2013-04-05 13:45:41

标签: javascript jquery jquery-mobile jquery-mobile-button

在我的jQuery移动应用上;

在menu.html和内部正文我做了类似这样的事情去了help.html;

....

$(document).off('pageinit', '#menupage').on('pageinit', '#menupage', function() {

    $(document).off('click', '#help').on('click', '#help', function(){
            $.mobile.changePage("help.html", {
                reloadPage: true,
                transition: "flip",
                reverse: false
            });
        });
}

....

<li><a id="help" href="#" role="link" data-role="none">
                        <div class="img help"></div>
                        <div class="menuTitle langMenuItem3">Help</div>
                        <div class="arrow"></div>
</a></li>

然后在help.html页面上,我有一个这样的后退按钮,返回menu.html:

<header data-role="header">
    <a href="#" data-rel="back" class="button" data-role="none">
        <div class="arrow_reverse"></div><span class="langBack">Terug</span>
    </a>
    <div class="pageTitle">Over deze app</div>
</header>

我的问题是这在正常条件下有效,但是如果我在menu.html上进行刷新,那么请转到help.html 然后再次返回菜单,menu.html无法正常加载,我可以看到视觉加载的页面确定,但是在firebug上我看到标签内部的一些必要的javascripts不再打,它从来没有在menu.html上的任何地方点击任何javascripts再也只是从缓存中加载以前的html。此外,menu.html的页面标题没有正确更改,并在该点之后保持为“帮助”。

我的完整menu.html看起来像这样;

http://jsfiddle.net/M5CYZ/

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这是一个疯狂的猜测,但根据您的代码,这是一种正常的行为。

jQuery Moible事件pageinit将在初始页面加载期间仅触发一次,除非刷新页面(手动,使用rel =“external”或在您的情况下为reloadPage =“true”),它将永远不会再次触发。

如果您希望每次访问页面时再次执行javascript,请改用pagebeforeshow事件。如您的示例所示,删除pageinit并将其添加回来对您没有帮助。

如果您想了解更多信息,请阅读我关于网页活动的其他答案/文章: jQuery Mobile: document ready vs page events

这是一个证明我的观点的例子:http://jsfiddle.net/Gajotres/Q3Usv/

$(document).on('pageinit', '#index', function(){       
    alert('Pageinit');
});

$(document).on('pagebeforeshow', '#index', function(){       
    alert('Pagebeforeshow');
});

答案 1 :(得分:2)

这样做。

回复按钮ID

<a href="#" id="backbtn" class="button"> 
 <div class="arrow_reverse"></div><span class="langBack">Terug</span> 
</a>

然后在 help.html

中添加以下代码
$('#backbutton').off('click').on('click', function () { 
 $.mobile.changePage("menu.html", { 
  reloadPage: true, 
  transition: "flip", 
  reverse: true 
 }); 
});