1

我正在尝试在点击时更新跳转链接 href。我将初始跳转链接设置为如下所示:

<a href="#2" id="next">Next</a>

然后我使用一点 JavaScript 来更新 href onclick:

var jump = this.href.match(/\#\d+$/)[0];
var num = parseInt(jump.substr(1, jump.length), 10);
var newNum = num + 1;

document.getElementById('next').href = '#' + num;

出于某种原因,当我第一次单击跳转链接时,它会将我带到#3(而不是预期的#2)。如果我将 HTML 中的 href 更改为 #1,它将带我到 #2,这似乎违反直觉。我想我的问题是,在 JavaScript 更新 href 之后是否会发生跳转(似乎是)?我怎样才能让它先跳转,然后更新href?

(另外,我正在使用 addEventListener() 来触发点击)。

4

2 回答 2

1
var jump = this.href.match(/\#\d+$/)[0];
var num = parseInt(jump.substr(1, jump.length), 10);
var newNum = num + 1;

setTimeout(function() {
    document.getElementById('next').href = '#' + newNum;
});

小重构:

var num = parseInt(this.href.split('#').pop(), 10);
var a = this;

setTimeout(function() {
    a.href = '#' + (num + 1);
});
于 2013-10-12T19:23:22.913 回答
0

您遇到的问题很可能是因为在触发事件之前发生了跳转,正如您所猜测的那样,这导致this成为新链接,您可以使用 a 进行检查console.log(this),在这种情况下,建议使用event.preventDefault();on事件,这不会使链接工作,您的代码将首先运行。为了确保,您在事件侦听器中添加了预防措施,如下所示:

something.addEventListener("click", function(event) {
  event.preventDefault();}, false)
于 2013-10-12T19:22:30.260 回答