事件:preventDefault() 方法

Baseline 已广泛支持

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

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

preventDefault() 方法是 Event 接口的一部分,它告知 用户代理 该事件正在被显式处理,因此不应执行其默认操作,例如页面滚动、链接导航或文本粘贴。

事件将像往常一样继续传播,除非其某个事件监听器调用了 stopPropagation()stopImmediatePropagation(),其中任何一个都会立即终止传播。

如下文所述,对非取消型事件(例如通过 EventTarget.dispatchEvent() 分派的事件)调用 preventDefault() 而不指定 cancelable: true 将不起作用。

如果一个被动监听器调用了 preventDefault(),则不会发生任何事情,并且可能会生成控制台警告。

注意: 寻找比使用 preventDefault() 来阻止默认操作更好的替代方案。例如,您可以使用表单控件上的 disabledreadonly 属性来阻止其被交互,使用 HTML 约束验证 来拒绝无效输入,或者使用 overflow 属性来阻止滚动。

语法

js
preventDefault()

参数

无。

返回值

无(undefined)。

示例

阻止默认的点击处理

切换复选框是点击复选框的默认操作。此示例演示了如何阻止这种情况发生。

JavaScript

js
const checkbox = document.querySelector("#id-checkbox");

checkbox.addEventListener("click", checkboxClick);

function checkboxClick(event) {
  const warn = "preventDefault() won't let you check this!\n";
  document.getElementById("output-box").innerText += warn;
  event.preventDefault();
}

HTML

html
<p>Please click on the checkbox control.</p>

<form>
  <label for="id-checkbox">Checkbox:</label>
  <input type="checkbox" id="id-checkbox" />
</form>

<div id="output-box"></div>

结果

注意

在事件流的任何阶段调用 preventDefault() 都会取消该事件,这意味着由该事件正常引起的任何默认操作都不会发生。

您可以使用 Event.cancelable 来检查事件是否可取消。对不可取消的事件调用 preventDefault() 将不起作用。

规范

规范
DOM
# ref-for-dom-event-preventdefault③

浏览器兼容性