preventDefault()不起作用

当我在链接上使用event.preventDefault()时,它可以工作,但是当我在按钮上使用它时不行!
DEMO
我的代码:

link ​ $('#link').click(function(event){ event.preventDefault(); }); $('#button').click(function(event){ event.preventDefault(); }); 

链接操作被取消,但是当我单击按钮时,仍然执行onClick操作
有帮助吗? 我想要做的是在不更改按钮html的情况下阻止按钮onClick动作(我知道该怎么做

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

你想要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'); 

你需要stopImmediatePropagation而不是preventDefault 。 preventDefault可防止默认浏览器行为,而不会阻止方法冒泡。

http://api.jquery.com/event.stopImmediatePropagation/

http://api.jquery.com/event.preventDefault/

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

您正在寻找的是stopImmediatePropagation

你可以试试这个:

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

DEMO