0

Hashchange 适用于何时

index.php

改变,说

index.php#my-hash

IE

$(window).bind('hashchange', function() {
  // do stuff
});

但是当有 时有事件吗?在网址之后,即

index.php?id=foo&something_else=bar...

编辑

好的,这是我提交表格的时候。我提交表单,然后 URL 更改为

index.php?id=blah#my-hash

但是我尝试听a)hashchange和b)表单提交:

$('form').submit(function() {
        go_to_signup_form();
});

两者都不起作用(我认为页面令人耳目一新?)。我不能过多地改变 php,因为它是 cms 的一部分,我不想破坏控制器类中发生的任何事情,所以我宁愿尝试看看何时:

index.php

更改为

index.php?id=blah#my-hash

编辑#2感谢大家的反馈,让它与:

if (url.indexOf("?") !== -1) {
    go_to_signup_form();
}
4

2 回答 2

2

不,那是因为参数 ( ?foobar) 通常不用于客户端代码。链接到同一个 url ( index.php -> index.php?foo=bar) 上的新参数会使您的浏览器加载新页面,而添加哈希 ( index.php -> index.php#foo=bar) 不会使浏览器向服务器传输任何数据。

url 的哈希部分,它是客户端数据。因此,为它设置一个change事件侦听器很有用。

在您的控制台中尝试这些,在 URL 中还没有哈希的随机站点上:

window.location.href += "?test"

和:

window.location.href += "#test"

您将看到第一个将重新加载页面(发送新的 HTTP 请求),第二个似乎不会做任何事情。

要阻止表单提交:

$('#target').submit(function() {
    // Your onclick code here
    return false; // Do not submit.
});
于 2012-12-07T15:08:06.163 回答
1

问题在于“hashchange”(从技术上讲,它意味着导航到锚点)完全是客户端操作。但是带有参数(“?”运算符)的 URL 会通过对服务器的新 HTTP 请求来实现,这会导致将新文档发送给用户。这意味着当用户点击链接index.php?id=foo时,页面会重新加载。

但是您可以通过检查window.location.href字符串来检查加载页面的 URL 的参数。

于 2012-12-07T15:07:57.177 回答