You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery Mobile中根据场景切换底部Navbar显示状态的问题

解决jQuery Mobile Navbar切换显示问题

问题根源

直接用hide()/show()切换Navbar的<li>元素后,jQuery Mobile不会自动重新计算导航项的宽度分配,导致布局错乱;另外你的HTML存在文本位置错误(部分文本在<a>标签外),JS代码有语法错误(f应为if,条件标识未明确)。

步骤1:修正HTML结构

把导航项的文本放到<a>标签内部,避免布局错位:

<div data-role="footer" data-position="fixed" data-tap-toggle="false">
    <div data-role="navbar">
        <ul id="abc">
            <li><a href="#" class="footerNavbar" data-icon="back" data-role="button" onclick="">a</a></li>
            <li id="a"><a href="#" class="footerNavbar" data-icon="check" data-role="button" onclick="">b</a></li>
            <li id="b"><a href="#" class="footerNavbar" data-icon="check" data-role="button" onclick="">c</a></li>
            <li id="c"><a href="#" class="footerNavbar" data-icon="forbidden" data-role="button" onclick="">d</a></li>
            <li id="d"><a href="#" class="footerNavbar" data-icon="delete" data-role="button" onclick="">e</a></li>
            <li id="e"><a href="#" class="footerNavbar" data-icon="check" data-role="button" onclick="">f</a></li>
            <li id="f"><a href="#" class="footerNavbar" data-icon="check" data-role="button" onclick="">g</a></li>
        </ul>
    </div>
</div>

步骤2:修正JS代码并添加Navbar刷新

修复语法错误,并且在切换显示后调用navbar("refresh")触发组件重新渲染,让剩余导航项自动均分宽度:

// 替换成实际的场景标识,比如'scene1'、'scene2'
if (variable == 'scene1') {
    $("#a").hide();
    $("#b").hide();

    $("#c").show();
    $("#d").show();
    $("#e").show();
    $("#f").show();
} else if (variable == 'scene2') {
    $("#a").hide();
    $("#b").hide();
    $("#c").hide();

    $("#d").show();
    $("#e").show();
    $("#f").show();
}
// 关键:刷新Navbar组件,重新计算布局
$("[data-role='navbar']").navbar("refresh");

额外优化建议

给不同场景的导航项分组标记class,批量隐藏/显示,代码更简洁:

if (variable == 'scene1') {
    $(".hide-in-scene1").hide();
    $(".show-in-scene1").show();
} else if (variable == 'scene2') {
    $(".hide-in-scene2").hide();
    $(".show-in-scene2").show();
}
$("[data-role='navbar']").navbar("refresh");

对应的HTML给<li>添加分组class:

<li id="a" class="hide-in-scene1 hide-in-scene2"><a href="#">b</a></li>
<li id="c" class="show-in-scene1 hide-in-scene2"><a href="#">d</a></li>

内容的提问来源于stack exchange,提问作者김완동

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:40:41