JavaScript 中判断事件能否取消默认行为需检查 event.cancelable 属性:true 可调用 preventDefault()(如 click、submit),false 则无效(如 load、error、scroll);建议先判断再调用以确保健壮性,自定义事件需显式设置 cancelable: true。

在 JavaScript 中,判断一个事件是否可以取消默认行为,关键看该事件对象的 cancelable 属性是否为 true。
查看 event.cancelable 属性
所有事件对象都有 cancelable 属性,它是一个布尔值:
-
true:表示该事件支持调用event.preventDefault()来阻止默认行为(如表单提交、链接跳转、右键菜单等) -
false:表示该事件是不可取消的,默认行为一定会发生,调用preventDefault()无效(如load、error、scroll等)
常见可取消与不可取消的事件
以下是一些典型例子:
-
可取消(
cancelable: true):click、submit、keydown、contextmenu、beforeunload -
不可取消(
cancelable: false):load、error、scroll、resize、focus、blur
注意:focus 和 blur 虽然不能取消聚焦/失焦动作本身,但它们的 cancelable 值确实是 false,调用 preventDefault() 没有效果。
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
运行时安全调用 preventDefault()
为避免在不可取消事件中无意义地调用 preventDefault()(虽无害但不严谨),推荐先判断:
element.addEventListener('click', function(e) {
if (e.cancelable) {
e.preventDefault();
}
});
这种写法更健壮,尤其在处理不确定来源的事件(如自定义事件或跨浏览器兼容场景)时很有用。
自定义事件的 cancelable 设置
通过 Event 或 CustomEvent 构造函数创建事件时,可显式指定 cancelable:
const customEvt = new Event('myAction', { cancelable: true });
element.dispatchEvent(customEvt); // 此时 customEvt.cancelable === true
未指定时默认为 false,即自定义事件默认不可取消。

















