单击内部锚点/哈希时自动更新javascript元素

单击内部锚点/哈希时自动更新javascript元素,javascript,anchor,Javascript,Anchor,单击链接时,我想在id=“demo”中显示更新的锚/散列。文件的布局如下 <html> <head> <script type="text/javascript"> function myfunction() { document.getElementById("demo").innerHTML=location.hash; } </script> </head> <body> <h1>Javascript

单击链接时,我想在
id=“demo”
中显示更新的锚/散列。文件的布局如下

<html>
<head>

<script type="text/javascript">
function myfunction()
{
document.getElementById("demo").innerHTML=location.hash;
}
</script>

</head>
<body>

<h1>Javascript</h1>
<p id="demo">This is a paragraph.</p>

<a href="#example" onclick="myfunction()">here</a>
</body>
</html>

函数myfunction()
{
document.getElementById(“demo”).innerHTML=location.hash;
}
Javascript

这是一个段落

唯一的问题是当点击链接时,javascript在第二次按下链接之前不会获得更新的锚定/散列。

这是因为“位置”指的是页面中的锚定

第一次单击时,页面中没有位置,但锚点会将您带到#示例,但所有这些都发生在onclick完成其业务之后。第二次单击,我们得到了#示例的位置


onclick事件在锚有机会完成其工作之前触发。这对于能够取消事件传播和防止重定向等非常重要。但遗憾的是,这会使代码变得复杂。

尝试使用此JQuery插件来检测哈希更改:


它是开源的,所以请查看,它非常复杂——300多行(带注释,但仍然如此)。

这是因为此时位置没有改变。以下是您可以使用的方法:

function myfunction() {
    // Sets the event handler once you click, so it will execute when
    // the hash will change.
    window.onhashchange = function() {
        document.getElementById("demo").innerHTML=location.hash;
    };
}
现代的方法是:

var hashchange;
function myfunction() {
    if ( !hashchange ) {
        hashchange = addEventListener( 'change', function() {
            document.getElementById("demo").textContent = location.hash;

            // If you want to remove the event listener right after,
            // you can do this:
            removeEventListener( hashchange );
        }, false );
    }
}
试试这个:

function myfunction() {
  setTimeout(function() {
    document.getElementById("demo").innerHTML=location.hash;
  }, 1);
}

因为当你点击链接时,散列仍然是你的前一个,所以你需要一个延迟。

IE8支持这一点,IE7不支持()。你真的支持IE7吗?然后使用jQuery。在这种情况下,每次执行函数时都会附加事件。因此,当您单击7次时,将有7个事件。应该没有任何函数。@jcubic您不会有7个事件,因为“旧学校”事件只能有一个事件处理程序。但是,是的,你每次都在设置相同的值。如果要使用
addEventListener
@jcubic,您将有7个事件处理程序。但是,您可能只想在单击一次后设置事件侦听器,这就是为什么它在这个函数中。@FlorianMargaine是的,如果不是,它将是动态的,每次哈希更改都会更改内容。但我希望
onclick=“myfunction()“
将运行javascript,但是javascript在页面更新之前运行了惊人的长?它有200多行注释。