访问事件以从源自tag的onclick属性的自定义函数调用preventdefault

Omu*_*Omu 109 html javascript jquery

我有这样的链接:

<a href="#" onclick="myfunc({a:1, b:'hi'})" />click</a>
<a href="#" onclick="myfunc({a:3, b:'jo'})" />click</a>
Run Code Online (Sandbox Code Playgroud)

我想preventDefault()在myfunc里面做一个,因为#点击链接时会在地址栏中添加一个(不做return false;或不做href='javascript:void(0);')

这可能吗 ?我可以在myfunc中获取事件吗?

Rus*_*Cam 142

我相信你可以传入event函数inline,它将成为eventW3C兼容浏览器中引发事件的对象(即IE的旧版本仍然需要在事件处理函数内部进行检测才能查看window.event).

一个简单的例子.

function sayHi(e) {
   e.preventDefault();
   alert("hi");
}
Run Code Online (Sandbox Code Playgroud)
<a href="http://google.co.uk" onclick="sayHi(event);">Click to say Hi</a>
Run Code Online (Sandbox Code Playgroud)

  1. 按原样运行,并注意警告后链接没有重定向到Google.
  2. 然后,将event传递给onclick处理程序的内容更改为其他内容,例如e单击"运行",然后注意重定向确实发生在警报之后(结果窗格变为白色,演示重定向).

  • 好吧,我看到我所要做的就是把我的参数放在第二个`myfunc(event,{a:123,b:"asdas"}) (5认同)
  • 我认为您不必显式传递和捕获事件对象。您可以在函数中简单地引用它。有人可以确认一下吗?我的意思是,这段没有事件的代码也应该可以工作: `function sayHi() { event.preventDefault(); 警报(“嗨”);}` (3认同)
  • @Omu 传入的参数 event 可以在任何地方,不必是第一个,只要它在函数定义的参数列表的正确位置即可。例如`function myfunc(o, e) {...}`,那么它可以被称为`myfunc({a:1, b:'hi'}, event)`。 (2认同)

JuL*_*uLo 104

最简单的解决方案就是:

<a href="#" onclick="event.preventDefault(); myfunc({a:1, b:'hi'});" />click</a>
Run Code Online (Sandbox Code Playgroud)

它实际上是一种很好的方法,可以为没有JS浏览器的后备文件执行缓存清理(如果没有JS,则没有缓存清除)

<a onclick="
if(event.preventDefault) event.preventDefault(); else event.returnValue = false;
window.location = 'http://www.domain.com/docs/thingy.pdf?cachebuster=' + 
Math.round(new Date().getTime() / 1000);" 
href="http://www.domain.com/docs/thingy.pdf">
Run Code Online (Sandbox Code Playgroud)

如果启用了JavaScript,它会打开带有缓存清除查询字符串的PDF,否则只会打开PDF.


Sua*_*Nti 11

试试这个:

<script>
    $("a").click(function(event) {
        event.preventDefault(); 
    });
</script>
Run Code Online (Sandbox Code Playgroud)


Ara*_*yan 7

<script type="text/javascript">
$('a').click(function(){
   return false;
});
<script>
Run Code Online (Sandbox Code Playgroud)

  • 这适用于每个锚点,并且会破坏所有链接,还需要在页面上插入javascript以及jQuery. (2认同)

aaa*_*dre 6

为链接添加一个唯一的类和一个javascript,以防止与此类的链接上的默认值:

<a href="#" class="prevent-default" 
   onclick="$('.comment .hidden').toggle();">Show comments</a>

<script>
  $(document).ready(function(){

    $("a.prevent-default").click(function(event) {
         event.preventDefault(); 
          });
  });
</script>
Run Code Online (Sandbox Code Playgroud)


Lei*_*ski 5

你不能从 a 标签中删除 href 属性吗?


小智 5

我认为当我们使用 onClick 时,我们想做一些不同于默认的事情。因此,对于所有与 onClick 的链接:

$("a[onClick]").on("click", function(e) {
  return e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)