如何检查是否已调用后退按钮事件?

时间:2012-09-30 19:05:28

标签: jquery browser-history hashtag

我正在努力使网站完全支持ajax但是我很难弄清楚如何支持历史记录。我使用http://balupton.github.com/jquery-history/demo/作为我的散列更改库,使用jquery:

$(document).on('click','a',function(){
    var url = $(this).attr('href');
    $.ajax({
        // AJAX Call and populate
    });
    $.History.go(url);
    return false;
});
$('input[type="submit"]').livequery('click',function(event){
    $(this).closest("form").ajaxForm(get_pages_load_options);
    var url = $(this).closest("form").attr('action');
    $.History.go(url);
});
$('.get_pages').livequery('change',function(){
    $(this).closest("form").ajaxForm(get_pages_load_options);
    var url = $(this).closest("form").attr('action');
    $.History.go(url);
});

我也使用以下javascript进行书签:

function hash_process() {
    url = window.location.hash.replace('#', '');
    $.ajax({
        //AJAX Call and Populate
    });
}
if (window.location.hash) {
    hash_process();
}

然而,通过以上两个片段,我发现后退按钮不起作用,特别是对于提交的表单。如果我添加以下代码,它只是给了我没有任何提交信息的默认页面,就像我从未提交过表格一样。

window.onhashchange = hash_process;

有没有办法可以检查后退按钮是否被调用?任何想法都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

我找到了这个难题的答案。由于第二次调用是在我提交表单后引起的,所以我最终只是在混合中添加了一个添加变量,如下所示:

ignore_hash = false;
function hash_process() {
    if (ignore_hash == false) {
        url = window.location.hash.replace('#', '');
        $.ajax({
            // AJAX Call & Populate
        });
    } else {
        ignore_hash = false;
    }
}

在检查之前启动的函数中,我将该变量添加到执行中:

$(document).on('click','a',function(){
    var url = $(this).attr('href');
    $.ajax({
        // AJAX Call & Populate
    });
    $.History.go(url);
    ignore_hash = true;
    return false;
});