阻止href ="#"链接更改URL哈希

Ida*_*ter 40 html javascript zurb-foundation

我有一个网站已经利用了URL中的哈希值,我不想让它改变.当我使用Zurb Foundation并使用href="#"菜单项时,单击它会删除以前的哈希值.

我该如何覆盖此行为?

更新:我认为最好留在元素中,因为当我更改它时,它会更改绑定到该HTML元素的样式.我总是喜欢在使用设计框架时保持默认约定而不是使用覆盖css属性的质量.

谢谢.

Ben*_*son 42

您可以侦听click事件并调用preventDefault以阻止浏览器设置哈希值.

jQuery示例:

$('.mylink').click(function(event){
    event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

  • 您还可以“返回false”,这是“ event.preventDefault”和“ event.stopPropagation”的简写 (2认同)

Dea*_*Man 32

相反,具有#在HREF,您可以使用javascript:;在HREF这不会让URL变化.

<a href="javascript:;">:Link</a>
Run Code Online (Sandbox Code Playgroud)

  • 正如我上面所说,我需要使用 &lt;a&gt; 因为 Foundation 有一个附加的样式,我更喜欢使用它们的样式和代码约定。(http://foundation.zurb.com/docs/components/dropdown.html) (3认同)
  • 与其这样做,不如使用按钮元素。 (2认同)

Que*_*tin 27

请阅读 Progressive EnhancementUnobtrusive JavaScript.

你应该(几乎)永远不会href="#".它是未定义锚点的链接(它将是页面的顶部).使用它的人通常是这样做的,因为他们想要将JavaScript挂掉.

如果你想要一个链接,那么它应该指向一个有用的地方.通常,这将是另一个使用服务器端技术的页面,以获得与JavaScript相同的效果(尽管速度较慢).然后,您可以阻止链接的正常行为.

例如:

<a href="/foo/bar" class="whatever">Foo: Bar</a>
Run Code Online (Sandbox Code Playgroud)

使用脚本:

addEventListener('click', function (ev) {
    if (ev.target.classList.contains('whatever')) {
        ev.preventDefault();
        loadWithAjax(ev.target.href);
    }   
});
Run Code Online (Sandbox Code Playgroud)

如果JavaScript执行的某些操作无法在链接中表示相同的功能,那么您不应该首先使用链接.使用a <button>,并认真考虑使用JavaScript/DOM而不是HTML将其添加到文档中.

(注意:很多人都希望支持那些不能识别classListaddEventListener 检查浏览器支持并找到兼容性例程的旧浏览器留给读者使用.使用YUI,jQuery或类似方法是处理兼容性的一种方法.)

  • 因此,如果 JS 无法加载,您不会得到一个什么都不做的 UI 控件。 (2认同)

Chi*_*gde 12

而不是使用"#"使用"javascript:void(0)"请参阅此链接以获取更多信息我应该使用哪个"href"值用于JavaScript链接,"#"或"javascript:void(0)"?


Abh*_*oel 10

只需使用:

<a href="javascript:void()">text</a>
Run Code Online (Sandbox Code Playgroud)


小智 5

我已完成以下操作以防止所有带有 href="#" 属性的标签执行导航(使用 JQuery):

$('a[href$="#"]').click(function (event) {
            event.preventDefault ? event.preventDefault() : event.returnValue = false;

        });
Run Code Online (Sandbox Code Playgroud)


Moh*_*day 5

这对我有用。

$(document).on('click', 'a', function (e) {
    if ($(this).attr('href') == '#') {
        e.preventDefault();
    }
});
Run Code Online (Sandbox Code Playgroud)