javascript - 使用 $(window).bind( 'hashchange' , function(e) 调用两次 ajax 搜索函数

标签 javascript jquery ajax

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

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

}

我还制作了另一个函数,用于在单击浏览器后退或前进按钮时使用 url 中的哈希值恢复搜索。这对于后退和前进按钮非常有效。

$(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') 。有没有办法仅针对浏览器后退和前进按钮或任何其他解决方案调用上述函数?

如何解决这个问题?

我将不胜感激任何形式的帮助..

最佳答案

也许我不太明白,但是你为什么要把hashchange函数绑定(bind)到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;
})();

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

然后进行另一次搜索,历史上又添加了一步。

然后是后退按钮。页面再次加载,因此执行匿名函数。检测到哈希值,因此执行搜索。并且哈希值被更改,但因为哈希值与以前相同,所以链接相同,因此不会将重复的步骤添加到历史记录中。

关于javascript - 使用 $(window).bind( 'hashchange' , function(e) 调用两次 ajax 搜索函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18118752/

相关文章:

javascript - 在 TypeScript 模块中使用 jQuery 扩展 AngularJS

javascript - SignalR 连接请求不发送 cookie

javascript - 如何在模态中将ajax数据插入表中

javascript - Cake PHP 3.0 中的 Jquery ajax 调用

javascript - 多次替换一个字母

javascript - 使用cookie隐藏div的问题

javascript - 使用 jQuery 从下拉列表(选择框)中获取选定的文本

javascript - 如何在 JavaScript 非 html 文件中包含 d3?

javascript - 使用 ROT13 密码混淆电子邮件时的引用错误

javascript - jQuery 滚动问题与scrollTop