当我在一个链接上使用event.preventDefault()
时,它可以工作,但是当我在一个按钮上使用它时就不行了!
DEMO
我的代码:
<a id="link" href="http://www.google.com">link</a>
<button id="button" onclick="alert('an alert')">button</button>
$('#link').click(function(event){
event.preventDefault();
});
$('#button').click(function(event){
event.preventDefault();
});
字符串
链接操作被取消,但当我点击按钮时,仍然执行onClick
操作。
任何帮助?我想做的是防止按钮onClick
动作而不改变按钮html(我知道如何做$('#button').removeAttr('onclick');
个
5条答案
按热度按时间gtlvzcf81#
如果一个元素上有多个事件处理程序,并且您希望阻止其他事件处理程序执行,则需要
event.stopImmediatePropagation();
。preventDefault()
仅阻止默认操作(例如提交表单或导航到另一个URL),而stopImmediatePropagation()
阻止事件在DOM树中冒泡 , 阻止同一元素上的任何其他事件处理程序执行。以下是一些有用的链接,解释各种方法:
然而,由于它仍然不工作,这意味着
onclick=""
处理程序在附加的事件处理程序之前执行。当您的代码运行时,onclick
代码已经执行,因此您无能为力。最简单的解决方案是完全删除该处理程序:
字符串
即使通过普通JavaScript(
addEventListener()
)使用useCapture=true
添加事件侦听器也无济于事-显然,内联事件甚至在事件开始沿DOM树向下移动之前就触发了。如果你只是不想移除处理程序,因为你需要它,只需将它转换为一个正确的附加事件:
型
hsvhsicv2#
你需要
stopImmediatePropagation
而不是preventDefault
。preventDefault防止默认浏览器行为,而不是方法冒泡。http://api.jquery.com/event.stopImmediatePropagation/
http://api.jquery.com/event.preventDefault/的
clj7thdc3#
preventDefault
函数不会阻止事件处理程序被触发,而是停止默认操作的发生。对于链接,它停止导航,对于按钮,它停止表单提交,等等。您正在寻找的是
stopImmediatePropagation
。mcdcgff04#
你可以试试这个:
字符串
DEMO
bjp0bcyl5#
它帮助了我
字符串