在不滚动页面的情况下向url添加带有javascript的哈希?

在不滚动页面的情况下向url添加带有javascript的哈希?,javascript,url,hash,scroll,Javascript,Url,Hash,Scroll,在不滚动页面的情况下向url添加哈希? 使用javascript 我打开一页 我向下滚动 我单击添加散列(可能带有值#test)的链接(示例:) 该页面不能向后滚动到顶部 如何做到这一点 注: 只是检查是否可以禁用移动,即使有id=“test”的标记 到目前为止,返回错误;可以正常工作(支持没有javascript的用户),也可以避免在html中出现id,但数字之类的东西没有问题,比如1、2、3(它们无论如何都不允许作为id) 所有答案都很好,没有什么新的或突破性的,也没有关于如何打破默认功能的

在不滚动页面的情况下向url添加哈希? 使用javascript

  • 我打开一页
  • 我向下滚动
  • 我单击添加散列(可能带有值#test)的链接(示例:)
  • 该页面不能向后滚动到顶部
  • 如何做到这一点

    注: 只是检查是否可以禁用移动,即使有id=“test”的标记 到目前为止,返回错误;可以正常工作(支持没有javascript的用户),也可以避免在html中出现id,但数字之类的东西没有问题,比如1、2、3(它们无论如何都不允许作为id)

    所有答案都很好,没有什么新的或突破性的,也没有关于如何打破默认功能的解决方案,但它可以做到。:)
    感谢您抽出时间回答。

    页面上没有的任何哈希都会导致这种行为。例如,在本页上。(链接使用Chrome2.0和IE6(目前我仅有的浏览器)进行了测试。)


    因此,如果您的URL导致您转到页面顶部,请确保页面上没有id或名称为该地址的内容。

    每个浏览器都会将哈希值解释为“转到该DOM id”。你可以试试我能想到的两件事:

  • 使添加哈希的操作返回false,从而禁用浏览器查找它的需要

  • 在单击的位置添加一个DOM标记,该标记的ID为要添加的哈希值,以停止浏览器移动。但这可能不是您想要的,因为您正在为某些内容添加哈希


  • 下面的任何一个示例都应该满足您的要求:

    <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br>
    <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br>
    <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br>
    <a href="pleaseEnableJS.html"
        onclick="window.location.hash = '#test1';return false;">Test 1</a>
    <a href="#test2">Test 2</a>
    <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br>
    <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br>
    <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br>
    



























































































    如果有任何元素具有
    id=“test1”
    id=“test2”
    ,并且包含一个HTML和JavaScript的小示例,但没有按预期工作。

    Welbog的答案很好,但在浏览器的地址栏中保留了
    #nonexistantanchor
    哈希

    要使用jQuery做到这一点,您可以向锚添加一个类,并使用该方法禁用导航和对url的更改

    <a href='#' class="nodefault">Clickable</a>
    
    <script>
    $("a.nodefault").click(function(event) {
      event.preventDefault();
    });
    </script>
    
    
    $(“a.nodefault”)。单击(函数(事件){
    event.preventDefault();
    });
    

    当然,美学上的两难选择是选择优雅的url还是不使用javascript的解决方案。

    “#”有一个真正的语义含义,即“在这个URI上标识的资源部分”。你为什么要打破这个标准期望?历史和后退按钮。我个人更喜欢用经典的基于标准的方式来实现,但是很多人都希望使用ajax。在我发布了这个问题之后(或者在发布过程中),google和deviant art实现了这个“坏”的方法,正如您在搜索内容时所看到的:)现在,最好的新方法是使用可能的重复项来加载ajax页面。@erdom这个问题是重复的吗?我的在2009年9月17日被问到,他的在2009年9月28日被问到。他的是复制品。:)经过这么长时间的思考,我意识到你是绝对正确的。