在jQuery中使用window.location.hash

5
我想使用jQuery制作一个颜色渐变的导航菜单,其中“按下”按钮与当前页面对应的行为不同于“未按下”按钮(特别是在悬停时不会淡化到不同的颜色)。如果我看 www.guitaracademy.nl 上的示例,则会发现它们使用本机javascript和window.location.hash属性。
然而,我似乎无法将此哈希传递到jQuery中。以下是一个示例脚本:
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
    var p=window.location.hash;
    $("#clickme").click(function(){
        alert(p)
    });
});
</script>
</head>
<body>
<a href="#test">Click me first</a>
<div id="clickme">Then click me</div>
</body>
</html>

加载此页面后,我点击“点我先”链接; 然后在地址栏中,我看到原始URL后面添加了“#test”。但是,如果我再点击“然后点我”div,我会看到一个空的警告。似乎哈希值没有“更新”。感谢任何帮助。
4个回答

6
尝试将哈希的调用移至函数内部,以便每次单击时都会调用。你之前的方式只有在页面初始加载时才会加载哈希。
$(function(){
    $("#clickme").click(function(){
        var p=window.location.hash;
        alert(p)
    });
});

嗨,是的,那个有效,谢谢大家的(汇聚)回复! - Kurt Peek

2
尝试将var p=window.location.hash;放在您的点击监听器中:
<script type="text/javascript">
    $(function(){
        $("#clickme").click(function(){
            var p=window.location.hash;
            alert(p)
        });
    });
</script>

0
你的针对 #clickme div 的函数从未尝试更新哈希值。如果你期望你的代码更新哈希值,你需要像这样操作它:
$("#clickme").click(function(){
    window.location.hash='#secondclick';

    //Remaining Code
});

0

哈希正在更新,但在这种情况下变量“p”没有被更新。

这里是赋值语句。

var p=window.location.hash;

当页面加载时,它只会执行一次。因此,在加载页面时,P的值为空,并且始终为空。

与其

alert(p)

尝试

alert(window.location.hash)

或者将赋值操作移动到点击回调函数内部。即在警告语句的上方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接