事件: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③

瀏覽器相容性