动态 JQuery 移动导航

2023-12-02

我遇到 jQuery 以及如何动态处理 url 的问题。如果我有一个带有链接的页面,并且每个页面都有一个用于调用函数的 id 和一个 id,那么我想做的是这样的。如何更改特定链接的 url 并将该 url 作为书签。下面是我的代码

<div data-role="page" id="#listview">
<div data-role="header">
    <h1>List</h1>
</div>

<div data-role="content">   
<ul data-role="listview" id="carlist">
  <li><a href="#" onclick="cardetails('1')">Acura</a></li>
  <li><a href="#" onclick="cardetails('2')>Audi</a></li>
  <li><a href="#" onclick="cardetails('3')>BMW</a></li>
</ul>
</div>

<div data-role="footer">
    <h4>Page Footer</h4>
</div>

因此,当您单击列表中的一辆车时,参数为 1 的名为 cardetails 的函数将返回到服务器并获取 id=1 的汽车的 cardetails。我的问题不是这个,而是当 JSON 数据返回时,我希望 url 更改为 cardetails#1 或类似的内容。因此它可以识别用户所在的位置,浏览器可以将其添加到历史记录中,如果用户为该 URL 添加书签,浏览器将能够找到显示相同数据的确切页面。


此示例使用 jQMchangePage()通过 Ajax 页面请求发送数据。仅当 'to' 参数为changePage()是一个网址。检查jQM 文档了解更多信息。

测试示例的说明:

  • 创建文件夹
  • 在文件夹内创建一个名为 cars.js 的文件
  • 在文件夹内创建一个名为 cars.html 的文件
  • 在文件夹内创建一个名为 car-details.html 的文件
  • 在每个文件中填写相应的代码,您可以在下面找到
  • 打开第一页的 cars.html 并导航

在 car.js 文件中添加以下代码:

$(document).on( "pageinit", "#car-page", function( e ) {
    $('#car-list a').on('click', function(e) {
        e.preventDefault();
        $.mobile.changePage('car-details.html', {
            data: {
                id: this.id
            }
        });
    });
});

$(document).on( "pageinit", "#car-details-page", function( e ) {
    var passedId = (($(this).data("url").indexOf("?") > 0) ? $(this).data("url") : window.location.href ).replace( /.*id=/, "" );
    $("#details").html(["Selected id is: '", passedId, "'"].join(""));
});

在 cars.html 页面中添加以下代码。

<!doctype html>
<html lang="en">
   <head>
        <title>Cars example</title>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
        <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
        <script src="./cars.js"></script>
    </head>
    <body>
        <div id="car-page" data-role="page">
            <div data-role="header">
                <h1><a data-ajax="false" href="/">Car list</a></h1>
            </div>
            <div data-role="content">   
                <ul data-role="listview" id="car-list">
                    <li><a href="#" data-transition="flip" id="acura">Acura</a></li>
                    <li><a href="#" data-transition="flip" id="audi">Audi</a></li>
                    <li><a href="#" data-transition="flip" id="bmw">BMW</a></li>
                </ul>
            </div>
        </div>
    </body>
</html>

在 car-details.html 页面中添加以下代码。

<!doctype html>
<html lang="en">
   <head>
        <title>Car Example</title>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
        <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
        <script src="./cars.js"></script>
    </head>
    <body>
        <div id="car-details-page" data-role="page">
            <div data-role="header">
                <h1><a data-ajax="false" href="/">Car details</a></h1>
                <a data-rel="back">Back</a>
            </div>
            <div data-role="content">   
                <div id="details"></div>
            </div>
        </div>
    </body>
</html>

实施例2

使用共享 JS 对象的解决方案:

在第二页上,选定的 id 显示在 div 上。此外,URL 包含 id,因此可以将其添加为书签。如果用户通过第一页导航到第二页,则 id 通过共享 JS 变量传递到第二页。如果用户打开带有书签的页面,则从 window.location.href 中提取 id。

请注意,您可以传递 id 或任何其他有助于识别用户选择的值,而不是在共享变量中传递 href 值。

测试示例的说明:

  • 创建文件夹
  • 在文件夹内创建一个名为 cars.js 的文件
  • 在文件夹内创建一个名为 cars.html 的文件
  • 在文件夹内创建一个名为 car-details.html 的文件
  • 在每个文件中填写相应的代码,您可以在下面找到
  • 打开第一页的 cars.html 并导航

在 car.js 文件中添加以下代码:

var passDataObject = { selectedHref: null }

$(document).on( "pageinit", "#car-page", function( e ) {
    $(this).find('a').unbind('click').click(function() {
        passDataObject.selectedHref = this.href;
    });
});

$(document).on( "pageinit", "#car-details-page", function( e ) {
    var passedId = (passDataObject.selectedHref != null ? passDataObject.selectedHref : window.location.href).replace( /.*id=/, "" );
    $("#details").html(["Selected id is: '", passedId, "'"].join(""));
});

在 cars.html 页面中添加以下代码:

<!doctype html>
<html lang="en">
   <head>
        <title>Cars example</title>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
        <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
        <script src="./cars.js"></script>
    </head>
    <body>
        <div id="car-page" data-role="page">
            <div data-role="header">
                <h1><a data-ajax="false" href="/">Car list</a></h1>
            </div>
            <div data-role="content">   
                <ul data-role="listview" id="car-list">
                    <li><a href="./car-details.html?id=1" data-transition="flip" id="acura">Acura</a></li>
                    <li><a href="./car-details.html?id=2" data-transition="flip" id="audi">Audi</a></li>
                    <li><a href="./car-details.html?id=3" data-transition="flip" id="bmw">BMW</a></li>
                </ul>
            </div>
        </div>
    </body>
</html>

在 car-details.html 中添加以下代码:

<!doctype html>
<html lang="en">
   <head>
        <title>Car Example</title>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
        <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
        <script src="./cars.js"></script>
    </head>
    <body>
        <div id="car-details-page" data-role="page">
            <div data-role="header">
                <h1><a data-ajax="false" href="/">Car details</a></h1>
                <a data-rel="back">Back</a>
            </div>
            <div data-role="content">   
                <div id="details"></div>
            </div>
        </div>
    </body>
</html>

实施例3

多页示例(地址栏 URL 不会根据汽车选择而改变)

<!doctype html>
<html lang="en">
   <head>
        <title>Cars example</title>
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
        <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
        <script>
            var passDataObject = { selectedId: null }

            $(document).on( "pageinit", "#car-page", function( e ) {
                $(this).find('a').unbind('click').click(function(e) {
                    e.preventDefault();
                    passDataObject.selectedId = this.id;
                    $.mobile.changePage('#car-details-page', { transition: 'flip'} );
                });
            });

            $(document).on( "pagebeforeshow", "#car-details-page", function( e ) {
                $("#details").html(["Selected id is: '", passDataObject.selectedId, "'"].join(""));
            });
        </script>
    </head>
    <body>
        <div id="car-page" data-role="page">
            <div data-role="header">
                <h1><a data-ajax="false" href="/">Car list</a></h1>
                <a data-rel="back">Back</a>
            </div>
            <div data-role="content">   
                <ul data-role="listview" id="car-list">
                    <li><a href="#" id="acura">Acura</a></li>
                    <li><a href="#" id="audi">Audi</a></li>
                    <li><a href="#" id="bmw">BMW</a></li>
                </ul>
            </div>
        </div>
        <div id="car-details-page" data-role="page">
            <div data-role="header">
                <h1><a data-ajax="false" href="/">Car details</a></h1>
                <a data-rel="back">Back</a>
            </div>
            <div data-role="content">   
                <div id="details"></div>
            </div>
        </div>
    </body>
</html>

我希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态 JQuery 移动导航 的相关文章

  • Javascript:如何根据 html 标签扩展用户选择?

    乐代码 http jsfiddle net frf7w 12 http jsfiddle net frf7w 12 所以现在 当前的方法将完全按照 选择的方式获取所选文本 并添加标签 以便在显示时页面不会爆炸 但我想做的是 就是说 当用户选
  • 如何延迟 NavLink 的反应?

    Delay e gt e preventDefault setTimeout gt e unpreventDefault make this work 500 render
  • JavaScript:参数列表后缺少 )

    这个 JavaScript 产生一个错误 参数列表后缺少 在 firebug 中使用代码 我究竟做错了什么 功能d缺少左括号 answer after 不应该逃避 只需常规报价即可
  • 从 JavaScript 将参数传递给 p:remoteCommand

    我想将值传递给remoteCommand来自 JavaScript 如果这是可能的 我该如何做到这一点以及如何在支持 bean 中接收它们 对的 这是可能的 如何执行此操作取决于 PrimeFaces 版本 你可以在PrimeFaces 用
  • Backbone.js 与 Google 地图 - 有关此问题和侦听器的问题

    我有一个为 Google Maps v3 创建的模块 我正在尝试将其转换为 Backbone js 视图构造函数 到目前为止 这是我的视图模块 我将解释代码后遇到的问题 pg views CreateMap Backbone View ex
  • 有一个带有复选框的 jsTree,如何禁用所有复选框?

    我有一个动态构建的 jsTree 它允许用户选择他选择的任何节点 现在我试图使这棵树只读 以便其他用户可以看到信息而不改变它 我找到的所有示例都是关于禁用特定节点 我的问题是 有没有办法将树上的所有复选框定义为只读 正在使用的代码 jQue
  • jQuery 1.6:backgroundPosition 与 backgroundPositionX 和 FF4 兼容性

    在尝试升级 jQuery 插件 iCheckbox http stackoverflow com questions 6032538 以在 jQuery 1 4 4 之上工作时 我发现使用 animate backgroundPositio
  • 将数字限制为段的最优雅的方法是什么?

    比方说x a and b是数字 我需要限制x到段的边界 a b 换句话说 我需要一个钳位功能 https math stackexchange com q 1336636 clamp x max a min x b 有人能想出一个更易读的版
  • 如何按值删除数组中的多个项目?

    我正在尝试做一个removeAll 函数 它将删除具有该特定值 而不是索引 的数组的所有元素 当我们对循环进行任何更改时 棘手的部分就出现了 索引往往会移动 使其很难像我们想要的那样工作 并且每次更改时都重新启动循环 这在大数组上效率非常低
  • 您网站上的自定义 jQuery 脚本有多少行代码?多少才算是太多呢?

    对于我们的网站 我使用了大量 jQuery 现在我正在查看基础库顶部的 340 行 jQuery 代码 多少是太多了 我将添加更多内容 我什么时候开始尝试压缩代码并最终转向 OOP 行数并不意味着什么 重要的是你实际上在做什么 您可能拥有
  • javascript onclick 进入新窗口

    这是我的代码
  • select 元素是否具有标准值属性?

    这是一个简单的问题 但我找不到任何参考资料 所以就在这里 假设我有一个选择元素
  • 在部分渲染时执行 JavaScript

    我有一些 JavaScript 代码 我想在用户单击其文件夹之一后执行 它会触发 show 操作和 show js erb 从而呈 现部分内容 Show js erb 当用户单击其文件夹之一时触发 如下所示 body append 它成功注
  • React TypeError:x 不是函数

    我在子组件中从父组件调用函数 booksRefresh 但出现错误 类型错误 booksRefresh 不是函数 我不知道为什么 因为 booksRefresh 是一个函数 有人可以帮我解释为什么会出现这个错误吗 这是我的代码 import
  • Skrollr 添加空白

    我已经尝试了一切 我在谷歌上阅读了 4 5 页试图找到适合我的修复程序 已经筋疲力尽了 即使我使用 skrollr 示例 我的问题仍然存在 不是说他们做错了什么 我知道我只是没有正确理解它 因此 我上传了一个演示 仅在移动设备上展示这个尴尬
  • 使用 Javascript 检测 Pepper (PPAPI) Flash

    我们使用的是专有的文档查看器 它与某些 Chrome 版本中的 Pepper 版本的 Flash 配合得不太好 所以我希望能够检测到它并重定向到不同格式的相同内容 由于这个版本似乎落后于 NPAPI 版本 所以我一直在使用闪光检测 http
  • jQuery - 未捕获类型错误:对象 # 没有方法“parent”

    我的代码有问题 Chrome代码光谱仪说第21行有问题 问题如下 Uncaught TypeError Object
  • 如何在 JSP 编辑器中激活 javascript 的语法着色 - Eclipse

    在某些情况下 javascript 确实必须位于 JSP 页面中 而不是位于单独的文件中 有些框架还使用Javascript做一些事情 以便用户将其包含到JSP标签中 这样JS就不会出现在
  • 在 Javascript 中创建数组

    我对 javascript 不太熟悉 并且在用 javascript 制作 2d 或者也许我可能需要 3d 数组时遇到了一些麻烦 我目前需要收集 2 条信息 一个 ID 和一个值 因此我创建了以下内容 var myArray var id
  • 开玩笑 setTimeout 不暂停测试

    it has working hooks async gt setTimeout gt console log Why don t I run expect true toBe true 15000 我已经查看了这个答案 Jest 文档和几

随机推荐

  • 语法错误:使用 Bash 时需要操作数

    我有两个想要循环的数组 我正确地构造了它们 在进入 for 循环之前 我确实回显它们以确保数组一切正常 但是当我运行脚本时 它输出一个错误 l lt syntax error operand expected error token is
  • XML 表到 LaTeX

    假设我有一个以下形式的 XML 表 table tr td First Name td td Bill Gates td tr tr td Telephone td td 555 77 854 td tr tr td 555 77 855
  • 来自 ASP.Net 服务器的推送通知

    我有一个执行一些操作的网络服务 当事件发生时 我会通知客户 我遇到的问题是我能够从客户端连接到服务器 但反之则不行 因为客户端恰好位于 NAT 路由器 后面 目前 我每分钟都会发出请求以检查通知 如果我能有一种技术可以更快地通知客户 而不必
  • 蓝牙 BLE 服务在 onCharacteristicRead 处返回状态 = 10

    我尝试从我连接的设备读取一些配置 但在回调中 onCharacteristicRead 参数 status 10 我注意到 status 0 表示 BluetoothGatt GATT SUCCESS 10 代表什么 我的代码如下 publ
  • HTML:使用innerHTML绘制表格

    document getElementById outputDiv innerHTML document getElementById outputDiv innerHTML table border 1 width 100 tr for
  • Cobertura 不适用于 Java 7

    我使用的是maven 3 0 4 JRE 1 7 0 09 当我使用mvn clean install我所有的测试都通过了 一切看起来都很好 这是我的 Surefire 插件配置
  • 构建 Flask-Restful API 以使用 SQLAlchemy

    因此 我尝试使用 Flask Restful 制作一个 API 但我找到的所有示例都将所有内容放入一个 app py 文件中 我在中找到了信息Flask Restful 文档解释如何构建 API 但不包含任何使用数据库的内容 我已经发布了我
  • Tomcat Guice/JDBC 内存泄漏

    由于 Tomcat 中的孤立线程 我遇到了内存泄漏 特别是 Guice 和 JDBC 驱动程序似乎没有关闭线程 Aug 8 2012 4 09 19 PM org apache catalina loader WebappClassLoad
  • signalR MVC 站点在 signalR 安装后无限期加载[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我创建了一个全新的 MVC4 应用程序 从 NuGet
  • 访问 JButton ActionListener 中的变量

    这似乎是一个非常简单的问题 但我在弄清楚如何处理它时遇到了很多麻烦 示例场景 final int number 0 JFrame frame new JFrame frame setVisible true frame setDefault
  • 我可以删除所有迁移文件并从头开始吗?

    我有一个 Rails API 应用程序 我将在很长一段时间后重新部署它 该应用程序是非生产版本 但我已准备好部署生产版本 我想基本上删除所有迁移文件并使用架构从头开始 这种方法有什么问题吗 假设我可以做到这一点 我需要将 schema rb
  • 使用 CSS 创建功能区

    我终于创建了侧边栏菜单 现在我需要在选定的项目上创建功能区 例如显示图像 红色 我需要真正的灰色功能区 但我不想使用图像背景而只使用 css 类 因此 我可以动态地删除类名并添加到另一个项目 我有一个you are here我想要查看功能区
  • 解析 .ini 文件

    我的问题是关于使用 Windows 命令行解析 ini 文件 我在尝试从文件中删除包含所有键的部分时陷入困境 该部分的名称已知并保存在变量中 我尝试保存行 开始 结束 以删除之间的内容 但它对我不起作用 这里有人可以帮助我吗 edit 这是
  • Seaborn 水平条形图

    默认的 Seaborn 条形图几乎对我有用 尽管有一些细节 如下图所示 请查看每个栏旁边和右侧的 文本 注释 有几点我想改进 由于某种原因 最后一栏不显示注释 我不知道如何解决这个问题 条形边缘与顶部和底部 X 轴之间没有空间 我想在那里留
  • 如何在地图上渲染标记时显示加载图标

    现在我正在开发一个应用程序 我必须在地图上大致显示大量标记 30K 到 50K 现在渲染地图时需要时间来渲染整个点 所以我想添加一个加载 gif 图标而 Navteq Map 渲染点 以便用户知道该地图正在渲染点 我正在使用最新的诺基亚 此
  • liquibase 命令行:找不到元素“changeSet”的声明

    我正在尝试组织我的变更集 以便每个文件都有一个变更集元素 如Liquibase 最佳实践 但是当我尝试对 Liquidbase xml 文件使用 validate 命令时 出现以下错误 liquibase cvc elt 1 找不到元素的声
  • 使用希腊语为 deltax 创建多字符 SymPy 符号

    我想做类似的事情deltax symbols delta x 但这似乎给出了一个元组而不是多字符符号 有可能吗 我应该补充一点 我正在使用 Jupyter 功能symbols很方便 因为它允许我们一次创建多个符号 例如a b c symbo
  • PHP 应用程序的 cookie 与会话

    实现 php 登录系统会话或 cookie 时什 么会更好 浏览器cookies shared between client browser and server PHP 除其他外 这意味着 用户可以直接读取 写入数据 并且您无法控制或限制
  • 在 Postgres 中对 SELECT 实施 UPDATE

    我意识到 Postgres 中没有 TRIGGER ON SELECT 给定一个像这样的表 CREATE TABLE t a INTEGER PRIMARY KEY b TEXT entered by INTEGER qry count I
  • 动态 JQuery 移动导航

    我遇到 jQuery 以及如何动态处理 url 的问题 如果我有一个带有链接的页面 并且每个页面都有一个用于调用函数的 id 和一个 id 那么我想做的是这样的 如何更改特定链接的 url 并将该 url 作为书签 下面是我的代码 div