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树并阻止同一元素上的任何其他事件处理程序被执行。
以下是一些解释各种方法的有用链接:
- http://api.jquery.com/event.preventDefault/
- http://api.jquery.com/event.stopPropagation/
- http://api.jquery.com/event.stopImmediatePropagation/
但是,由于它仍然不起作用,这意味着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可防止默认浏览器行为,而不会阻止方法冒泡。
preventDefault
函数不会停止触发事件处理程序,而是停止发生默认操作 。 对于链接,它会停止导航,对于按钮,它会停止提交表单等。
您正在寻找的是stopImmediatePropagation
。
你可以试试这个:
$('#button').show(function() { var clickEvent = new Function($(this).attr('click')); // store it for future use this.onclick = undefined; });
DEMO