如何使用jQuery Mobile阻止链接添加到历史堆栈中

时间:2011-07-25 16:03:47

标签: jquery jquery-mobile

使用jQuery mobile,我使用列表视图,其中包含上一页和下一页的分页链接。一切正常,但我不希望将prev和next页面添加到历史堆栈中。我们的想法是,回到实际的上一页。

我发现这样做的唯一方法就是在a标签上添加data-rel =“dialog”,但我不希望它成为弹出式对话框。

否则我试图添加

$.mobile.nonHistorySelectors="dialog,pagination"

到mobileinit事件,将属性data-rel =“pagination”添加到a标签。但是这只会在单击链接时抛出错误(即使没有将nonHistorySelectors添加到mobileinit事件中也会发生错误)。

编辑:

我发现最接近的是这个JS

<script type="text/javascript">
    $(".page-prev").click(function(e) {
        e.stopPropagation();
        e.preventDefault();

        $.mobile.changePage(this.href, {changeHash:false, reverse:true});
    });

    $(".page-next").click(function(e) {
        e.stopPropagation();
        e.preventDefault();

        $.mobile.changePage(this.href, {changeHash:false});
    });
</script>

和这个HTML

<a href="/blog?page=1" class="page-prev" data-role="button" data-icon="arrow-l">Prev</a>
<a href="/blog?page=3" class="page-next" data-role="button" data-icon="arrow-r">Next</a>

这似乎可以很好地保持浏览器历史记录的更新,但有时当点击下一页时,滑动的页面会做一些时髦的事情,比如加载/滑动两次。此外,它没有做的一件事是,如果我从这里导航到一个页面并返回,它将在第1页返回。

5 个答案:

答案 0 :(得分:1)

没有任何机制可以静默删除任何浏览历史记录。

您应该使用AJAX填充列表。 因此,您的链接将显示为<a href="javascript:renderNextPage()">

答案 1 :(得分:1)

data-rel="back"添加到锚标记是否有效?

这是jQuery Mobile演示文档中建议的解决方案,在'Back linking'下。

http://jquerymobile.com/demos/1.0b1/#/demos/1.0b1/docs/pages/docs-pages.html

答案 2 :(得分:1)

这样做,应该没问题:

 // Fix for back buttons
    $(document).on('vclick', '[data-rel=back]', function(e) {
        e.stopImmediatePropagation();
        e.preventDefault();
        // $.mobile.back(e);
        var back = $.mobile.activePage.prev('[data-role=page]');
        $.mobile.changePage(back, {
            transition: 'slide',
            reverse: true,
            changeHash: false
        });
    });

答案 3 :(得分:0)

我遇到了同样的问题,我的解决方案是将网站导航和分页导航分成两个单独的导航菜单。所以我有网站导航的标题导航,并将下一个/上一个导航按钮添加到页面:AJAX Request Help for next/previous page

直播示例:

更新:

这是我的意思的一个快速例子:

JS:

var currentPage=1;
loadCurrentPage();

$("#next, #prev").click(function(){
    currentPage= ($(this).attr('id')=='next') ? currentPage + 1 : currentPage - 1;

    if (currentPage==0) 
        currentPage=1;
    else if (currentPage==101) 
        currentPage=100;
    else
        loadCurrentPage();
});

function loadCurrentPage(){
    //$('input').attr('disabled','disabled');
    $('#displayResults').html('<img src="http://blog-well.com/wp-content/uploads/2007/06/indicator-big-2.gif" />');

    $.ajax({
        url: '/echo/html/',
        data: 'html=Current Page: ' + currentPage+'&delay=1',
        type: 'POST',
        success: function (data) {
           // $('input').attr('disabled','');
            $('#displayResults').html(data);
        }
    });

    $('#home').page();
}

HTML:

<div data-role="page" id="home"> 
    <div data-role="content">
        <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="f"> 
            <li data-role="list-divider">Home Page</li> 
            <li><a href="#page2">Page 2</a></li> 
        </ul> 
        <input id="next" type="button" value="Next" />
        <input id="prev" type="button" value="Previous" /> 
        <div id="displayResults" name="displayResults">
        </div>
    </div>
</div>
<!-- Page 2 -->
<div data-role="page" id="page2"> 
    <div data-role="content">
        <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="f"> 
            <li data-role="list-divider">Page 2</li> 
            <li><a href="#home">Home Page</a></li> 
        </ul>
    </div>
</div>

答案 4 :(得分:0)

data-rel attr对我有用

<a data-rel="dialog" ... 

根据文件

链接 链接(包括具有data-role =“按钮”的链接)和表单提交按钮共享这些属性

data-rel 返回(在历史记录中向后移动一步)

对话框(打开样式为对话框的链接,未在历史记录中跟踪)

外部(用于链接到其他域)

https://demos.jquerymobile.com/1.0/docs/pages/page-links.html