2

我正在研究 ajax search.ajax 函数在 onblur 事件上被调用。下面是示例代码。

function search_ajax(sh_val,sh_act)
{
    ....some search code.....
    window.location.hash = sh_val+'@'+sh_act;

}

当单击浏览器后退或前进按钮时,我已经制作了另一个功能,用于使用 url 中的哈希值恢复 serch。这适用于后退和前进按钮。

$(window).bind( 'hashchange', function(e) {
var page=location.hash.slice(1)
if (page!="" && page!="p")
    {
        search_ajax(page,'catsh');
    }
    return false;
 });

但是当我搜索 ajax 搜索功能被调用两次时,我遇到了问题。$(window).bind('hashchange') 在我搜索时也会被调用。有没有办法只为浏览器的后退和前进按钮或任何其他解决方案调用上述函数?

我该如何解决这个问题?

我会很感激任何帮助..

4

2 回答 2

2

您可以使用信号量:

var searching = false;

function search_ajax(sh_val, sh_act) {
    searching = true;
    ....some search code.....
    window.location.hash = sh_val + '@' + sh_act;
    searching = false;
}

$(window).bind('hashchange', function (e) {
    if (searching) 
        return false;
    var page = location.hash.slice(1);
    if (page != "" && page != "p") {
        search_ajax(page, 'catsh');
    }
    return false;
});
于 2013-08-08T12:37:36.887 回答
2

可能我不是很明白,但是你为什么要把hashchange函数绑定到window上???它没有任何意义。我在自己的应用程序中有类似的搜索功能。这并不复杂。我的搜索功能(可以说)与您的相同:

function search_ajax(sh_val,sh_act)
{
    ....some search code.....
    window.location.hash = sh_val+'@'+sh_act;
}

另一个在每次页面加载时执行一次:

(function() {
var page=location.hash.slice(1)
if (page!="" && page!="p")
    {
        search_ajax(page,'catsh');
    }
    return false;
})();

因此,如果您单击搜索按钮,则会调用搜索功能。哈希已更改。添加了进入浏览器历史记录的一步。

然后又一次搜索,又增加了一个历史步骤。

然后返回按钮。页面再次加载,因此执行匿名功能。检测到哈希,因此执行搜索。并且散列被改变了,但是因为散列和以前一样,所以链接是一样的,那么没有重复的步骤被添加到历史中。

于 2013-08-08T12:29:27.243 回答