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();
}
答案 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的参数。