javascript – history.pushstate无法浏览器返回和转发按钮

我正在使用jQuery来动态地加载div容器中的内容.

服务器端代码检测请求是AJAX还是GET.

我想让浏览器的后退/前进按钮使用代码,所以我尝试使用history.pushState.我必须遵循一些代码:

$('.ajax').on('click',function(e) {
    e.preventDefault();
    $this = $(this);
    $('#ajaxContent').fadeOut(function() {
        $('.pageLoad').show();
        $('#ajaxContent').html('');
        $('#ajaxContent').load($this.attr('href'),function() {
            window.history.pushState(null,"",$this.attr('href'));
            $('.pageLoad').hide();
            $('#ajaxContent').fadeIn();
        });
    });
});

一切正常,除非浏览浏览器后退/转发按钮,否则栏中的地址会根据计划而改变,但页面不会更改.我究竟做错了什么?

在Clayton的答案帮助下更新了脚本

var fnLoadPage = function(url) {
    $('#ajaxContent').fadeOut(function() {
        $('.pageLoad').show();
        $('#ajaxContent').html('').load(url,function() {
            $('.pageLoad').hide();
            $('#ajaxContent').fadeIn();
        });
     });
};

window.onpopstate = function(e) {
     fnLoadPage.call(undefined,document.location.href);
};

$(document).on('click','.ajax',function(e) {
    $this = $(this);
    e.preventDefault();
    window.history.pushState({state: new Date().getTime()},'',$this.attr('href'));
    fnLoadPage.call(undefined,$this.attr('href'));
});

解决方法

@ Barry_127,看看这是否适合你: http://jsfiddle.net/SX4Qh/
$(document).ready(function(){
    window.onpopstate =  function(event) {
        alert('popstate fired');
        $('#ajaxContent').fadeOut(function() {
            $('.pageLoad').show();
            $('#ajaxContent').html('')
                             .load($(this).attr('href'),function() {
                                $('.pageLoad').hide();
                                $('#ajaxContent').fadeIn();
                             });
        });
    };

    $('.ajax').on('click',function(event) {
        event.preventDefault();
        alert('pushstate fired');
        window.history.pushState({state:'new'},$(this).attr('href'));
    });

 });

如果你看看我提供的小提琴,然后点击按钮,警报会开始显示你正在推动一个新的状态.如果随后pushstate触发后,继续单击后退按钮,您将看到上一页(或popstate)将触发.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


js中event的用法
js中能调用python吗
js中split的用法
js怎么设置边框样式
js中截取字符串的方法
js中innerhtml的用法
javascript的成熟分类方式有哪些
js中document是什么意思
js怎样让div中的文字居中
js中怎样定义一个对象
javascript的成熟分类介绍
js中parseint什么意思
js中字符串如何排序
void在js中是什么意思
js中如何定义函数
js中arguments是什么意思
js中什么是同步和异步
js中如何sleep一秒
js中ui函数是什么意思
js中如何遍历数组