【问题标题】:jquery mobile header repeat across pagesjquery mobile header跨页面重复
【发布时间】:2012-08-17 16:16:52
【问题描述】:

我正在根据提供的模板设置多页 jquery 移动页面: http://jquerymobile.com/demos/1.1.1/docs/pages/multipage-template.html

如何让页眉/页脚在所有页面上重复而不在页面内容中重复。

是否有一个 jquery 脚本或者我必须使用某种 php 包含文件?

提前致谢!

【问题讨论】:

    标签: php jquery mobile jquery-mobile footer


    【解决方案1】:

    您可以使用 JS (jQuery) 制作模板,并在创建时将其附加到每个 data-role="page" 元素。

    //create template, notice the "{TITLE}" place-holder for dynamically adding titles
    var myHeaderHTML = '<div data-role="header" data-id="my-header" data-position="fixed"><h1>{TITLE}</h1></div>';
    
    //create delegated event handler for the "pagecreate" event for all pseudo-pages
    $(document).on('pagecreate', '[data-role="page"]', function () {
    
        //get the title of this page, if none is given then use a generic title
        var title = $(this).data('title') || 'Some Generic Title';
    
        //add the header to this pseudo-page
        $(this).append(myHeaderHTML.replace('{TITLE}', title));
    });​
    

    这是一个演示:http://jsfiddle.net/vmMVj/

    这将在每个页面被创建时附加一个固定的标题。我通过将data-title="Some Title" 属性添加到data-role="page" 元素来添加对传递唯一标题的支持。

    请注意,我选择了pagecreate 事件,因为它在伪页面即将初始化时发生。如果您要绑定到pageinit 事件,您将为时已晚,必须手动初始化标题小部件。

    【讨论】:

    • 在我的标题中,我有一个选择语言组件的选择菜单。像 OP 一样,我不想拥有这个组件的多个实例,所以这个想法似乎不错。但显然,当我将
      从一个页面移动到另一个页面时(使用此处建议的 .append(...) ),选择菜单的功能会中断......
    • 显然,如果要添加数据属性,则必须使用 pagebeforecreate 事件,根据文档:api.jquerymobile.com/pagebeforecreate 但是,我尝试了这两种方法都没有运气:(
    • 当我说我没有运气时,我的意思是:当 jQuery Mobile 触发指定事件时,我无法执行我的自定义事件处理函数。在上述函数中放置alert("test")console.log("test")语句没有任何效果。我尝试将上述函数放在我的代码中的不同位置,但无济于事。
    • @JoeDyndale 听起来您的事件处理程序是在错误的时间或错误的位置创建的。
    • 是的,我也是这么想的,但我已经尝试在 mobileinit 事件处理程序、$(document).ready()、deviceready 处理程序和几个我现在想不到的其他地方。这些地方都没有工作。所有这些地方都是在加载了所有必要的库和特定于应用程序的 js 文件之后。所以我没有地方可以尝试了。
    【解决方案2】:

    据我所知,您必须在每个 data-role="page" 容器中包含页眉和页脚。如果您不想避免为每个页面输入此内容,那么我会require_once() PHP 中包含页眉或页脚的页面,并使用它来代替每次写出页眉和页脚。

    示例:

    <section data-role="page">
    <?php require_once("header.php"); ?>
    
    <div data-role="content">
    <p>Hello world!</p>
    </div>
    
    <?php require_once("footer.php");?>
    </section>
    

    header.php:

    <header data-role="header">
    <h1>Title</h1>
    </header>
    

    footer.php:

    <footer data-role="footer">
    <<p>Footer content here</p>
    </footer>
    

    【讨论】:

      【解决方案3】:

      为什么更多的 JS ? ...而不是为页眉和页脚添加两个元素(“页眉”和“页脚”标签,或具有适当类的 div,但必须使用“位置:固定;”) - 并在页面 div 的顶部和底部添加填充? ...不需要JS代码...这将提高性能...虽然很少:) ...

      【讨论】:

      • 不同的解决方案肯定适用于不同的情况。这个解决方案对 JS 性能有好处,但是 position:fixed 是一个需要设置的资源密集型属性(这会减慢重绘速度)。这两种性能差异很可能都很小。
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签