当用户点击链接(<a>元素)时如何取消导航?

How to cancel navigation when user clicks a link (<a> element)?

提问人:Max Schmeling 提问时间:5/15/2009 最后编辑:JohnMax Schmeling 更新时间:11/17/2023 访问量:89717

问:

当用户单击链接时,我正在尝试使用 AJAX 加载一些东西,但我希望链接实际上转到某个地方,以便在禁用 javascript 时应用程序仍然可以运行。有没有办法在点击链接时使用 javascript 做一些事情并取消导航?

最佳做法是什么?可以这样做吗,或者我需要使用 javascript 替换链接还是什么?

jQuery查询

评论


答:

55赞 Paolo Bergantino 5/15/2009 #1

如果你有这样的 HTML:

<a href="no_javascript.html" id="mylink">Do Something</a>

你可以用jQuery做这样的事情:

$(document).ready(function() {
    $('#mylink').click(function() {
        doSomethingCool();
        return false; // cancel the event
    });
});

您所要做的就是使用 Javascript 取消点击事件,以防止发生默认操作。因此,当有人单击启用了 Javascript 的链接时,会调用该链接并取消 click 事件(因此 ),并阻止浏览器转到指定的页面。但是,如果他们禁用了 Javascript,则会直接将其带到。doSomethingCool();return false;no_javascript.html

评论

3赞 Gromer 5/15/2009
+1,但很多人会把 href=“#” 放在他们计划用于 javascript 的链接中。
0赞 Max Schmeling 5/15/2009
好吧,我是个白痴。我以为这是要做的事情,但它没有用。原来它只是 IE 缓存了 javascript,所以它没有执行我的新行并返回 false。
1赞 Max Schmeling 5/15/2009
@Gromer - 这个想法是让它在有或没有 javascript 的情况下工作。
0赞 KyleFarris 5/15/2009
@Gromer - 但是,Max 提出的问题的重点是,如果用户没有启用 javascript,是否有办法让链接照常工作。当然,href='#' 会起作用,但它不会做任何事情(除了更改 URL 哈希),因此会导致糟糕的用户体验。
1赞 Paolo Bergantino 7/11/2009
不,就像我的代码一样,大卫。仅当您忽略返回 false 时;
31赞 Sergei Kovalenko 5/15/2009 #2

为什么选择jQuery?

HTML格式:

<a href="no_javascript.html" onclick="return doSmth()">Link</a>

...和 JavaScript 代码:

function doSmth(){
  // your code here
  return false
}

评论

0赞 Max Schmeling 5/15/2009
好吧,我正在使用 jQuery(就像这个网站上的大多数人一样),即使我没有指定......但是谢谢你的帖子,它可能对某人有用。
1赞 Sergei Kovalenko 5/18/2009
好的,我明白了。我认为框架可能对大型强大的项目有用。但对于小型网站...
4赞 Paolo Bergantino 7/11/2009
Javascript 框架在关心浏览器兼容性的所有规模的网站上都很有用。此外,使用内联事件总体上是一种不好的做法。
3赞 Wes Duff 6/18/2015
谢谢!!!男人。。。人们放开了jQuery......至少如果你不需要它更高级的功能!谢谢你的帖子!-- 这也适用于 onclick = “return false;”如果您使用 google polymer 并使用 on-tap=“{{func}}” 方便,这将很方便
3赞 John 12/21/2017
+1 没有像业余爱好者一样蹩脚并倾倒浏览器已经胜任处理的 70KB 废话。
1赞 Albert Pool 6/23/2009 #3

我曾经导航,但是当我想取消导航时,(在与 相同的功能中)不会取消导航。document.location.replacereturn falsedocument.location.replace

3赞 chill 12/29/2010 #4

至少对于IE来说,只需放在方法的末尾即可。this.event.returnValue = false;

例如:

function onClickFunction()
 {
  someMethod();
  this.event.returnValue = false;
 }

我有一个复杂的方法,可以做到这一点。

48赞 Partap Davis 6/9/2011 #5

这些都不适用于 Google Chrome 浏览器。

以下是有效的方法(使用jQuery):

$(document).ready(function() {
    $('#mylink').click(function(event) {
        doSomethingCool();
        event.preventDefault(); // cancel the event
    });
});

评论

3赞 Derrick 8/26/2011
返回 false 对 IE 有效,但不适用于 Firefox 或 Chrome;这个解决方案对两者都有效,谢谢!
2赞 Mikhail Orlov 10/1/2014
两个补充:1)在做一些很酷的事情之前,可能想调用preventDefault()。2)在函数开头添加以下内容,以正确支持鼠标中键: if(event.which != 1) return;
0赞 Gabriel Beauchemin-Dauphinais 12/29/2022
return false;在我的情况下不适用于 Chrome,但此解决方案有效。谢谢。
9赞 jsa 1/4/2014 #6

我会做的是:

a. 对于 href 属性,将设置javascript:void();

b.b. 对于 onclick 事件,将提供一个函数来处理 click 事件,该函数将返回 false。

例如:

<script type="text/javascript">
   function myfunction()
   {
      //do something
      return false;
   }
   </script>

   <a href="javascript:void();" onclick="myfunction()">Link</a>
4赞 Andrew 12/21/2015 #7
<a href="http://www.google.com" class="ignore-click">Test</a>

使用 jQuery:

<script>
    $(".ignore-click").click(function(){
        return false;
    })
</script>

使用 JavaScript

<script>
        for (var i = 0; i < document.getElementsByClassName("ignore-click").length; i++) {
            document.getElementsByClassName("ignore-click")[i].addEventListener('click', function (event) {
                event.preventDefault();
                return false;
            });
        }
</script>

您将类分配给任意数量的元素,单击这些元素将被忽略.ignore-click

-6赞 Javier López de Ancos 10/14/2016 #8

很简单,使用 rel=“nofollow” 属性

 <a href="signin.php" rel="nofollow">sign in</a>

评论

1赞 Dmitry 7/18/2018
rel=nofollow 是完全无关紧要的。这是针对 SEO 的,不适用于浏览器
0赞 Kyad 2/10/2017 #9

最好的方法应该是这个。

<a href="javascript:undefined"></a>
0赞 rhigdon 7/7/2021 #10

我刚刚用过

<a href="https://ryanhigdon.com" onClick={ event => {
  event.preventDefault()
}}>Take me away</a>

在我的用例中,我想在导航之前执行一些操作。

0赞 Catuczi Penteci 11/17/2023 #11

CANCEL CLICK ON LINK 标签 A

在按住单击键的那一刻,检查条件数据并为链接分配状态活动

实现了水平滑块的滚动。按住单击并左右移动内容。 当选择元素时,内容中的链接应保持活动状态,但是当您按住鼠标并移动时,请取消内部标记 a 的事件

let linkActive;
let cont = document.addEventListener('.cont');


let toggleActiveEvent = (prop, event, revoke) => {
    if (event.target.tagName === 'A' || linkActive) {
        (linkActive ? linkActive : event.target).style.pointerEvents = prop;
        linkActive = revoke ? null : event.target;
        return event.preventDefault();
    }
};

cont.addEventListener('mousedown', (event) => {
    toggleActiveEvent('none', event);
});
cont.addEventListener('click', (event) => {
    event.preventDefault();
});
cont.addEventListener('mouseup', (event) => {
    toggleActiveEvent('all', event, true);
});

МАКЕТ

<div class="cont"><a href="/"></a></div>

CSS 指针事件支持的 BROWSER(用于 HTML)