如何在JQuery Mobile中更改页面时传递参数?

Luk*_*lar 8 jquery jquery-mobile

我已经搜索了stackoverflow但没有找到一个合适的解决方案来以编程方式更改jqm页面并传递一个(get)参数.我是jqm的新手,所以也许我在使用changePage()函数传递数据时遇到了问题.

使用jquery mobile 1.1.1和jquery 1.8.0

我有一个列表,并希望所有项目都指向同一个#profile页面.在那个页面上我想用ajax/json加载适当的数据.

<ul data-role="listview" data-theme="a">
   <li><a href="#profile">Martin</a></li>
   <li><a href="#profile?id=2">Johnny</a></li>   
   <li><a href="#" onclick="changePage()">Luke</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

第一个链接工作,但没有id传递(显然)

第二个链接不工作抛出异常(在chrome中):未捕获错误:语法错误,无法识别的表达式:#profile?id = 3

第三个链接使用此功能:

function changePage() {
            $.mobile.changePage("#profile", { data: {id:1} });
            //alert('page changed.'); 
            return false;
        }
Run Code Online (Sandbox Code Playgroud)

它会更改页面但是url是basefile.html?id = 1但它应该是basefile.html #profile?id = 1

任何人都可以帮忙吗?非常感谢.

Apo*_*dis 16

正如jQuery Mobile Docs中所提到的,jQuery Mobile不支持将查询参数传递给内部/嵌入页面,但有两个插件可以添加到项目中以支持此功能.有一个轻量级页面params插件和一个功能更全面的jQuery Mobile路由器插件,可与backbone.js或spine.js一起使用.

还有其他方法可以在不同的页面中实现数据传递,但旧的Web浏览器可能不支持其中一些.您必须仔细选择实施方式,以免影响应用程序在多个浏览器上的互操作性.

您可以使用Web存储在不同页面之间传递数据.

W3schools网站所述,HTML5网页可以在用户的​​浏览器中本地存储数据.早些时候,这是用cookies完成的.但是,Web存储更安全,更快捷.每个服务器请求都不包含这些数据,但仅在被要求时使用.还可以存储大量数据,而不会影响网站的性能.数据存储在键/值对中,并且网页只能访问自己存储的数据.Internet Explorer 8 +,Firefox,Opera,Chrome和Safari支持Web存储.Internet Explorer 7及更早版本不支持Web存储.

有两个对象用于在客户端上存储数据:

  • localStorage存储没有过期日期的数据
  • sessionStorage存储一个会话的数据

例子:

本地存储示例:

在Page1:localStorage.carType ="test";
在Page2中,您可以使用:localStorage.carType检索carType

会话存储示例:

在Page1:sessionStorage.carNumber = 10;
在Page2中,您可以使用:sessionStorage.carNumber检索carType

关于您的情况,可能的解决方案是在每个锚中添加ID.然后捕获click事件,检索id,将id保存在Web存储中并执行页面转换.在下一页中,从Web存储中检索id.您可以在下面找到实施方案:

<ul id="menu_list" data-role="listview" data-theme="a">
   <li><a id="1" href="#">Martin</a></li>
   <li><a id="2" href="#">Johnny</a></li>   
   <li><a id="3" href="#">Luke</a></li>
</ul>


$('#menu_list').children().each(function(){
    var anchor = $(this).find('a');
    if(anchor)
    {
        anchor.click(function(){
            // save the selected id to the session storage and retrieve it in the next page
            sessionStorage.selectedId=anchor.attr('id');
            // perform the transition
            changePage();
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:

遵循多页方法时传递参数的替代方法

此示例用于使用jQM changePage()Ajax页面请求发送数据.

$('#list-d a').on('click', function(e) {
    e.preventDefault();
    $.mobile.changePage('car-details.html', {
        data: {
            id: this.id
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

构造的URL是.../car-details.html?id = my-id

有关完整示例,请检查此StackOverflow答案

我希望这可以帮助你.

  • 您是否认为在离开一个页面时可以简单地保存JS变量,然后在显示下一页时读取相同的变量?以下是一个基本示例:http://stackoverflow.com/questions/10502558/jquery-mobile-retrieving-data-between-pages/10503403#10503403.另外,我会小心在处理用户交互的事件处理程序中读取或写入`sessionStorage`或任何其他类型的浏览器实现的持久存储.这些读/写占用大量CPU,并且可能需要花费一秒钟才能在移动手机上完成(这会带来负面的用户体验). (2认同)