jQuery Mobile:更新导航栏时替代 .trigger('create') 或 .page()?

Posted

技术标签:

【中文标题】jQuery Mobile:更新导航栏时替代 .trigger(\'create\') 或 .page()?【英文标题】:jQuery Mobile: alternative of .trigger('create') or .page() when updating navbar?jQuery Mobile:更新导航栏时替代 .trigger('create') 或 .page()? 【发布时间】:2012-03-02 03:18:12 【问题描述】:

我有以下 jQuery Mobile html 代码,导航栏的内容是使用 javascript 设置的。 jQuery mobile 在静态设置导航栏时对其进行样式设置,但是当您稍后使用 javascript 设置它的内容 (html) 时,您必须做一些额外的工作才能使其正常工作:

    <div data-role="header">
        <h1 id="title">App</h1>
    </div><!-- /header -->

    <div data-role="content" id="content">    
        <p>Loading...</p>
    </div><!-- /content -->

    <div data-role="footer" data-position="fixed">
        <div data-role="navbar" id="navbar">
            <ul id="menu">
            </ul>
        </div>
    </div><!-- /footer -->
</div><!-- /page -->

trigger('create');一般用于解决使用javascript/ajax设置时无样式标记的问题。 然而,它似乎只适用于data-role="content" 而不适用于#navbar。下面的脚本应该可以工作,但菜单没有样式...

$(function()
    $("#menu").html("<li><a href='#'>Test Styling</a></li>").trigger('create');
);

任何想法如何解决这个问题?我试过page();.listview('refresh'); 没有结果。

【问题讨论】:

【参考方案1】:

在追加列表项后尝试调用navbar方法:

$(function()
    $("#menu").html("<li><a href='#'>Test Styling</a></li>");
    $("#navbar").navbar(); 
);

编辑: 您也可以尝试动态创建导航栏:

var footer = $("#footer-id");

var navBar = $("div", 
    "data-role":"navbar",
    "html":"<ul><li><a href='#'>Test Styling</a></li></ul>"
).appendTo(footer).navbar();   

【讨论】:

我明天早上会再试一次,但现在它似乎引发了一个错误:no such method 'refresh' for navbar widget 在执行$("#navbar").navbar("refresh");$("#navbar").navbar(); 时似乎没有效果。 谢谢,它确实有效。 JavaScript 执行的具体时刻很重要!显然必须在 DOM 加载后运行它.. 嗨,你还有什么需要做的吗?这对我不起作用,它不会加载动态创建的 元素的类。

以上是关于jQuery Mobile:更新导航栏时替代 .trigger('create') 或 .page()?的主要内容,如果未能解决你的问题,请参考以下文章

导航Jquery Mobile + PhoneGap

禁用 Jquery Mobile Ajax 导航

jQuery Mobile 导航栏

jQuery Mobile 导航栏

jQuery Mobile 面板导航冻结/挂起

jQuery Mobile 选项卡导航延迟