事件:cancelable 属性

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

注意:此功能在 Web Workers 中可用。

Event 接口的只读属性 **cancelable** 指示事件是否可以被取消,从而阻止其发生,就好像事件从未发生过一样。

如果事件不能被取消,则其 cancelable 属性将为 false,事件监听器将无法阻止事件的发生。

大多数浏览器原生事件都是用户与页面交互的结果,这些事件是可以被取消的。取消 clickwheelbeforeunload 事件将分别阻止用户点击某个元素、使用鼠标滚轮滚动页面或离开页面。

合成事件(由其他 JavaScript 代码创建)在创建时定义了它们是否可以被取消。

要取消事件,请在事件上调用 preventDefault() 方法。这会阻止实现执行与事件关联的默认操作。

处理多种事件类型的事件监听器在调用其 preventDefault() 方法之前,可能需要检查 cancelable 属性。

一个布尔值,如果事件可以被取消,则为 true

示例

例如,浏览器供应商提议 wheel 事件只能在 第一次调用监听器时被取消——任何后续的 wheel 事件都无法被取消。

js
function preventScrollWheel(event) {
  if (typeof event.cancelable !== "boolean" || event.cancelable) {
    // The event can be canceled, so we do so.
    event.preventDefault();
  } else {
    // The event cannot be canceled, so it is not safe
    // to call preventDefault() on it.
    console.warn(`The following event couldn't be canceled:`);
    console.dir(event);
  }
}

document.addEventListener("wheel", preventScrollWheel);

规范

规范
DOM
# ref-for-dom-event-cancelable②

浏览器兼容性