jquery preventDefault()不会阻止操作

xcitsw88  于 12个月前  发布在  jQuery
关注(0)|答案(5)|浏览(95)

当我在一个链接上使用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');

gtlvzcf8

gtlvzcf81#

如果一个元素上有多个事件处理程序,并且您希望阻止其他事件处理程序执行,则需要event.stopImmediatePropagation();preventDefault()仅阻止默认操作(例如提交表单或导航到另一个URL),而stopImmediatePropagation()阻止事件在DOM树中冒泡 阻止同一元素上的任何其他事件处理程序执行。
以下是一些有用的链接,解释各种方法:

然而,由于它仍然不工作,这意味着onclick=""处理程序在附加的事件处理程序之前执行。当您的代码运行时,onclick代码已经执行,因此您无能为力。
最简单的解决方案是完全删除该处理程序:

$('#button').removeAttr('onclick');

字符串
即使通过普通JavaScript(addEventListener())使用useCapture=true添加事件侦听器也无济于事-显然,内联事件甚至在事件开始沿DOM树向下移动之前就触发了。
如果你只是不想移除处理程序,因为你需要它,只需将它转换为一个正确的附加事件:

var onclickFunc = new Function($('#button').attr('onclick'));
$('#button').click(function(event){
    if(confirm('prevent onclick event?')) {
        event.stopImmediatePropagation();   
    }
}).click(onclickFunc).removeAttr('onclick');

hsvhsicv

hsvhsicv2#

你需要stopImmediatePropagation而不是preventDefault。preventDefault防止默认浏览器行为,而不是方法冒泡。
http://api.jquery.com/event.stopImmediatePropagation/
http://api.jquery.com/event.preventDefault/

clj7thdc

clj7thdc3#

preventDefault函数不会阻止事件处理程序被触发,而是停止默认操作的发生。对于链接,它停止导航,对于按钮,它停止表单提交,等等。
您正在寻找的是stopImmediatePropagation

mcdcgff0

mcdcgff04#

你可以试试这个:

$('#button').show(function() {
  var clickEvent = new Function($(this).attr('click')); // store it for future use
  this.onclick = undefined;
});

字符串

DEMO

bjp0bcyl

bjp0bcyl5#

它帮助了我

function goToAccessoriesPage(targert) {
       targert.onclick.arguments[0].preventDefault();
       ...
}

字符串

相关问题