窗口事件时“?”在当前URL之后添加

时间:2012-12-07 15:03:28

标签: javascript events window

Hashchange用于何时

index.php

改变,比如说

index.php#my-hash

$(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();
}

2 个答案:

答案 0 :(得分:2)

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

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

在您的控制台中,在网址中没有哈希值的随机网站上尝试这些:

window.location.href += "?test"

window.location.href += "#test"

您将看到第一个将重新加载页面(发送新的HTTP请求),第二个将不会执行任何操作。

阻止表单提交:

$('#target').submit(function() {
    // Your onclick code here
    return false; // Do not submit.
});

答案 1 :(得分:1)

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

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