当我在 jquery 中从一个页面转到另一个页面并使用浏览器后退按钮返回上一页时,上一页的导航栏项目的选项卡状态不会保留。请帮忙
2 回答
jQuery Mobile 的问题及其navbar
正在更改页面过程。当您单击某个navbar
项目时,您将立即初始化更改页面过程,并且不会正确应用正确的样式。但是即使它们被正确应用,由于更改页面过程,它们也不会传播到DOM
.
在这种情况下,我们需要手动完成。你想要做的是#href
从你的navbar
li 元素中删除或用 # 替换它的值。向同一个 li 元素添加一个点击事件。
当用户单击导航栏选项卡时,javascript 必须删除所有可用的类,称为:ui-btn-active
和ui-state-persist
. 如果您在每个页面中都有一个导航栏,那么让它们都具有相同的名称,因为这个 javascript 将需要遍历所有这些。当所有这些类都被删除时,然后再次添加它们,但这次只添加到单击/选定的navbar
项目。
现在手动初始化 jQuery Mobile 的 changePage 函数并让它转换到需要的页面。当 changePage 函数结束时,它的转换正确导航栏元素将被选中(如果单击后退按钮,它也会在前一页上被选中)。
工作示例:http: //jsfiddle.net/Gajotres/6h7gn/
$(document).on('pagebeforeshow', '#index', function(){
$(document).off('click', '#custom-navbar li').on('click', '#custom-navbar li', function(e){
var selectedLi = $(this);
$('#custom-navbar li').each(function( index ) {
var loopLi = $(this);
if(loopLi.find('a').hasClass('ui-btn-active') || loopLi.find('a').hasClass('ui-state-persist')) {
loopLi.find('a').removeClass('ui-btn-activ').removeClass('ui-state-persist');
}
if(loopLi.attr('id') == selectedLi.attr('id')) {
loopLi.find('a').addClass('ui-state-persist');
}
});
setTimeout(function(){
$.mobile.changePage( selectedLi.find('a').attr('data-href'), { transition: "slide"});
},100);
});
});
您是否class="ui-btn-active ui-state-persist"
在导航栏中使用来保持选项卡状态?
检查链接中给出的示例