我有一个都具有唯一的ID是各个环节的“伪锚”。 我希望他们能够影响网址哈希值和魔法点击全部是由一些MooTools的代码来处理。 然而,当我点击链接,他们滚动到自己(或在一种情况下的顶部)。 我不想在任何地方滚动,还需要我的JavaScript执行,并在网址更新哈希值。
模拟示例代码:
<a href="#button1" id="button1">button 1</a>
<a href="#button2" id="button2">button 2</a>
<a href="#" id="reset">Home</a>
所以,如果你点击了“按钮1”链接,该链接可能是http://example.com/foo.php#button1
有没有人有任何想法? 只要有一些JavaScript返回空隙杀死滚动,但也杀死了我的JavaScript(虽然我大概可以解决与一个onclick),但更重要的是,防止在URL中的散列值来改变。
我可能失去了一些东西,但为什么不给他们不同的ID?
<a href="#button1" id="button-1">button 1</a>
<a href="#button2" id="button-2">button 2</a>
<a href="#" id="reset">Home</a>
或任何约定,你更喜欢。
一个锚链接的全部要点是将页面滚动到一个特定的点。 所以,如果你不希望这样的事情发生,你需要一个附加onclick
处理程序,并返回false。 即使只是将其作为一个属性应该工作:
<a href="#button1" id="button1" onclick="return false">button 1</a>
的上述效果的一侧是URL本身不会改变,因为返回false将取消事件。 所以,既然你想要的网址真正改变,你可以设定window.location.hash
变量所需的值(即是,你可以更改,恕不浏览器强制重新加载的URL的唯一属性)。 你也许可以将一个事件处理程序,并调用类似window.location.hash = this.id
虽然我不知道的mootools如何处理事件。
(你也需要所有ID是唯一的)
您可以使用下面的代码,以避免滚动:
<a href="javascript:void(0);">linktxt</a>
我找到了解决办法。 在这里,我从打电话的href保存旧的位置和滚动后恢复
<script language="JavaScript" type="text/javascript">
<!--
function keepLocation(oldOffset) {
if (window.pageYOffset!= null){
st=oldOffset;
}
if (document.body.scrollWidth!= null){
st=oldOffset;
}
setTimeout('window.scrollTo(0,st)',10);
}
//-->
</script>
在网页的身体
<a href="#tab1" onclick="keepLocation(window.pageYOffset);" >Item</a>
由于sitepoint
此外, preventDefault
$(your-selector).click(function (event) {
event.preventDefault();
//rest of your code here
}
一个简单的方法很可能是将其添加为一个GET。 也就是说, http://example.com/foo.php?q=#button1
而不是http://example.com/foo.php#button1
这不会对如何页面显示任何影响(除非你想让它),大多数脚本语言已经有工具的地方,很容易(和安全)读取数据。
好了,我们在这里的7年后这个答案已经出版,我发现了一个不同的方式,使其工作:只要点window.location.hash到一个不存在的锚! 它不为工作<a>
秒,但在完美的作品<div>
秒。
<div onclick="window.location.hash = '#NonExistentAnchor';">button 1</div>
在Chrome 56,Firefox的52和边缘(IE?)38.工作得很好换个好点的是,这不会产生任何控制台错误或警告。
希望它可以帮助别人,除了我。