Javascript 在不重新加载页面的情况下更新URL哈希 函数CurHash(){ var id=parseInt(window.location.hash.replace(“#”); 警报(id); }

Javascript 在不重新加载页面的情况下更新URL哈希 函数CurHash(){ var id=parseInt(window.location.hash.replace(“#”); 警报(id); },javascript,jquery,url,Javascript,Jquery,Url,如果我们现在在test.htm#1上并单击链接#2,则警报将显示1个数字,而不是2,并且在URL中的此哈希值更改为2之后。下次单击3时,它将显示prevouse 2,依此类推 这对我来说是一个问题,因为我使用哈希在固定高度上滚动我的页面内容(由于架构问题,无法使用锚),并且这种在点击链接后的行为只会在第二次点击时发生,这是完全错误的 问题:我如何更新散列并获取更新的(不是以前的)值以供进一步使用,而不必在浏览器中重新加载页面(页面上已有用于滚动的所有内容,从服务器重新加载不是一个好的解决方案)。

如果我们现在在test.htm#1上并单击链接#2,则警报将显示1个数字,而不是2,并且在URL中的此哈希值更改为2之后。下次单击3时,它将显示prevouse 2,依此类推

这对我来说是一个问题,因为我使用哈希在固定高度上滚动我的页面内容(由于架构问题,无法使用锚),并且这种在点击链接后的行为只会在第二次点击时发生,这是完全错误的


问题:我如何更新散列并获取更新的(不是以前的)值以供进一步使用,而不必在浏览器中重新加载页面(页面上已有用于滚动的所有内容,从服务器重新加载不是一个好的解决方案)。

不完全是跨浏览器的,但如果需要,您可以获得跨浏览器的散列更改解决方案

<script>
function CurHash(){
    var id = parseInt(window.location.hash.replace("#", ""));
    alert(id);
}
</script>

<!-- START URL: test.htm#1 -->
<a href='#1' onClick='CurHash()'>#1</a>
<a href='#2' onClick='CurHash()'>#2</a>
<a href='#3' onClick='CurHash()'>#3</a>

$(窗口).on('hashchange-load',function()){
var id=parseInt(window.location.hash.replace(“#”);
警报(id);
});
使用绑定:

使用于:

我将使用onpopstateonhashchange事件侦听器:

<script>
$(window).on('hashchange load',function(){
    var id = parseInt(window.location.hash.replace("#", ""));
    alert(id);
});
</script>

<!-- START URL: test.htm#1 -->
<a href='#1'>#1</a>
<a href='#2'>#2</a>
<a href='#3'>#3</a>

无标题文件
if(typeof window.onpopstate!=“未定义”){
window.onpopstate=curHash;
}else if(typeof window.onhashchange!=“未定义”){
window.onhashchange=curHash;
}
函数curHash(){
var h=window.location.hash;
if(h='')return;//没有散列。这可能是第一次加载
h=h.substr(1);//哈希总是以#
警报('hash:'+h);
}

您可以设置URL的哈希值

<html>
<head>
<title>Untitled Document</title>
<script type="text/javascript">

    if (typeof window.onpopstate != 'undefined') {
        window.onpopstate = curHash;
    } else if (typeof window.onhashchange != 'undefined') {
        window.onhashchange = curHash;
    }

    function curHash() {
        var h = window.location.hash;
        if (h == '') return; // no hash. this is probably the first load
        h = h.substr(1); // hash always starts with #
        alert('hash: ' + h);
    }

</script>
</head>

<body>
<ul style="margin:0; padding:0;">
    <li><a href="#1">Click here for 1</a></li>
    <li><a href="#2">Click here for 2</a></li>
    <li><a href="#3">Click here for 3</a></li>
    <li><a href="#4">Click here for 4</a></li>
</ul>
</body>
</html>

您还可以使用JS变量来存储单击的链接,并将其传递到代码中。。。除非我误解了这个问题。

不要在onclick中调用curHash,而是在设置hash后在href中调用它。。请查找以下代码

window.location.hash = '#newhash';


我应该如何从OnClick on links调用您的代码?我想我做错了什么,不能让你的代码工作…我已经更新了我的答案。我需要
类型的
操作符,抱歉误导您。这可以在哪些浏览器中使用?我尝试了FF、Chrome和Opera,但没有成功…@DaneSoul请检查我刚才用的小提琴added@DaneSoul我想至少需要1.7.1,否则就使用bindOh,这是一个有趣的解决方案!以前没有见过这样的语法,但这是有效的!这不是一个很好的解决方案,因为代码太草率了。您应该使用标准的link href来更新哈希,并使用库来侦听hashchange事件()。只是想让您知道原因:因为“onclick”事件是在哈希更新之前触发的。这将重新加载页面,而这正是不需要的
<a href='javascript:location.hash="#1";CurHash();'>#1</a>
<a href='javascript:location.hash="#2";CurHash();'>#2</a>
<a href='javascript:location.hash="#3";CurHash();'>#3</a>