history.pushstate使浏览器后退和前进按钮失败 [英] history.pushstate fails browser back and forward button
问题描述
我正在使用jQuery动态加载div容器中的内容。
I'm using jQuery to dynamically load content in a div container.
服务器端代码检测请求是AJAX还是GET。
The server side code detects if the request is AJAX or GET.
我希望浏览器返回/转发按钮使用代码,所以我尝试使用history.pushState。我必须遵循一段代码:
I want the browsers back/forward buttons to work with the code so I try to use history.pushState. I've got to following piece of code:
$('.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();
});
});
});
一切正常,除非使用浏览器后退/前进按钮浏览时,栏中的地址会根据情况而变化计划,但页面不会改变。我做错了什么?
Everything works fine except when browsing with the browsers back/forward button, the adress in the bar changes according to plan but the page doesn't change. What am I doing wrong?
在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/
@Barry_127, see if this will work for you: 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'));
});
});
如果您看一下我提供的小提琴并单击按钮,警报将会显示你正在推动一个新的国家。如果您在触发状态触发后再继续单击后退按钮,您将看到上一页(或popstate)将触发。
If you take a look at the fiddle I provided and click the button, the alert will fire showing that you are pushing a new state. If you then proceed to click the back button once the pushstate has fired, you will see that the previous page (or popstate) will fire.
这篇关于history.pushstate使浏览器后退和前进按钮失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!