HTML 锚链接 - href 和 onclick 两者?

IT技术 javascript jquery html anchor
2021-02-12 15:34:34

我想编写一个执行一些 JavaScript 的锚标记,然后继续去任何href需要它的地方。调用一个执行我的 JavaScript 然后设置window.locationtop.location到该href位置的函数对我不起作用。

所以,假设我在页面上有一个 id 为“Foo”的元素。我想创作一个类似于以下内容的锚点:

<a href="#Foo" onclick="runMyFunction(); return false;">Do it!</a>

单击它时,我想执行 runMyFunction 然后将页面跳转到#Foo(不会导致重新加载 - 使用top.location会导致它重新加载页面)。

建议?如果 jQuery 可以在这里提供帮助,我很乐意使用它...

4个回答

只是return true代替?

onClick代码的返回值决定了链接的固有点击动作是否被处理 - 返回false意味着它没有被处理,但是如果你返回,true那么浏览器将在你的函数返回后继续处理它并转到正确的锚。

在过去,每当我使用 js 函数来启动一个新页面,并且只为 href 属性放置一个“#”时,我都会返回“-1”以防止默认操作,这通常是浏览器跳转在页面顶部,或者有时我只是不返回任何内容。最近,我不得不按照@Amber 的建议修改所有这些页面……如果我不希望页面跳转,则专门返回 false。
2021-03-17 15:34:34
@Ruben 你能解释一下为什么你不应该在点击事件处理程序上使用 event.preventDefault() 吗?
2021-03-22 15:34:34
如果 onclick 不返回任何内容怎么办?
2021-03-23 15:34:34
@maciek 然后将返回值视为undefined出于这些目的而被视为 false。
2021-04-03 15:34:34
@Amber 似乎如果 onclick 不返回任何内容,则将处理链接的固有点击操作。
2021-04-04 15:34:34
<a href="#Foo" onclick="return runMyFunction();">Do it!</a>

function runMyFunction() {
  //code
  return true;
}

通过这种方式,您将执行函数并且您将遵循该链接并且您将在您的函数成功运行后完全遵循该链接。

如果您的函数在延迟函数调用后返回 true 似乎不起作用?
2021-03-30 15:34:34

如果链接应该只在函数运行成功时更改位置,那么执行onclick="return runMyFunction();"并且在函数中您将返回 true 或 false。

如果您只想运行该函数,然后让锚标记完成其工作,只需删除该return false语句即可。

作为旁注,您可能应该改用事件处理程序,因为内联 JS 不是一种非常理想的做事方式。

在做一个干净的 HTML 结构时,你可以这样做。

const element = document.getElementById('link_1')
element.onClick = function (e) {
    e.preventDefault()
    window.open('_top', element.getAttribute('href'))
}

使用 jQuery

$('a#link_1').click(function (e) {
    e.preventDefault()
    const a = e.target
    window.open('_top', a.getAttribute('href'))
})
你在你可以但不能之后的一切周围放置空间//对我来说真的很有趣
2021-03-15 15:34:34
我很抱歉我的语法很差,我修复了它以使其遵循当前的 javascript 标准。
2021-03-23 15:34:34