preventDefault() 不会阻止该操作
preventDefault() doesn't prevent the action
当我在链接上使用event.preventDefault()
时,它可以工作,但是当我在按钮上使用它时则不起作用!
演示
我的代码:
<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
操作。
有什么帮助吗? 我想做的是在不更改按钮 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');
即使通过带有useCapture=true
的纯javascript(addEventListener()
(添加事件侦听器也无济于事 - 显然内联事件甚至在事件开始下降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;
});
演示
帮助了我
function goToAccessoriesPage(targert) {
targert.onclick.arguments[0].preventDefault();
...
}
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 如何确定javascript已经完成了某些操作.ios上的
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 从JavaScript访问struts操作中的属性
- fluxxor向一个flux实例添加一组以上的操作
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 操作放置在画布上的元素之间的连接
- 使用“+="操作人员
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- Jquery未定义函数正在停止其他操作
- 如何操作iframe之外的元素
- javascript对象操作:根据指定条件选择属性
- jQuery:暂停按钮可以暂停所有其他操作
- 用于选择/文本框操作的JavaScript
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 通过javascript操作图像,非常简单
- 将文本框中的值用于按钮窗体操作上的变量
- 当通过AJAX调用时,控制器操作不会执行
- 操作javascript变量[HTML]以只显示文本