13

e.preventDefault();用来禁用默认锚行为。

有没有办法防止在点击时只跳转到目标?

我试过了:

  var hash = window.location.hash;
  var link = $('a');
  $('a').click(function() {
    e.preventDefault();
    hash = "#"+link.attr("href");
  });

但它不起作用:http: //jsfiddle.net/ynts/LgcmB/

4

7 回答 7

26
$(document).ready(function() {
  var hash = window.location.hash;
  var link = $('a');
  $('a').click(function(e) {
    e.preventDefault();
    hash = link.attr("href");
    window.location = hash;
  });
});

您还必须在函数中指定事件参数。通过将其命名为eorevent然后您可以对其进行操作。

于 2013-01-06T19:42:22.770 回答
14

这是我能想出的唯一解决方案,它可以在具有各种客户端 UI 库和框架的所有桌面和移动浏览器中始终如一地工作。通过在滚动发生之前获取窗口坐标,我们可以恢复并保持当前滚动位置。

$('a').click(function (e) {
    var x = window.pageXOffset,
        y = window.pageYOffset;
    $(window).one('scroll', function () {
        window.scrollTo(x, y);
    })
});
于 2015-12-31T09:18:10.547 回答
5

为了防止“跳转”,您必须为目标元素使用与锚中指定的不同的 id。

例如,对于新标签使用的链接,

<a href="#new" />

并且对于目标元素掩码 id

<div id="new-tab"></div>

然后在您的脚本中将掩码附加到真正的哈希中,并使用它来获取元素。

$(window).on("hashchange", function(){
    var hash = this.location.hash;
    var mytab = $(hash + "-tab");
});

这保留了浏览器历史记录中的哈希位置更改,可以通过后退/前进按钮控制,并且hashchange如果用户进入指定哈希的页面,则在页面加载时检测到该事件。

于 2014-08-07T08:41:26.953 回答
3

您应该将 onclick 事件绑定到锚点并指定return false;为结果。该return false;语句导致默认单击行为(跳转)不起作用。您可以在此处找到更多信息:加载页面时如何禁用锚点“跳转”?

于 2013-07-30T15:04:21.613 回答
2

您需要在函数上传递事件。

         var hash = window.location.hash;
         var link = $('a');
         //pass event here
         $('a').click(function(e) {
           e.preventDefault();
           hash = "#"+link.attr("href");
         });
于 2013-01-06T19:43:54.810 回答
1

在第一次尝试此页面上的其他答案之后,这就是我所需要的:

  $('a').click(function (e) {
    e.preventDefault();
  });

于 2020-01-03T03:53:09.153 回答
0

您可以使用matchwith^来检测从#

$("a:link").on("click", function(e){
    if($(this).attr("href").match("^#")) {
        e.preventDefault();
        //some other stuff you want to do with the hash, like smooth scroll to anchor
        $('html, body').animate({ scrollTop: $($(this).attr("href")).offset().top }, 'fast');
    }
});
于 2019-10-04T09:19:14.440 回答