单击内部锚点/哈希时自动更新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多行注释。