HTMLElement:change 事件

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

當用戶修改 <input><select><textarea> 元素的值時,會觸發 change 事件。與 input 事件不同,change 事件不一定會在元素 value 的每次更改時都觸發。

根據被更改元素的型別以及使用者與元素的互動方式,change 事件會在不同的時刻觸發:

HTML 規範列出了 應該觸發 change 事件的 <input> 型別

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

js
addEventListener("change", (event) => { })

onchange = (event) => { }

事件型別

一個通用的 Event

示例

<select> 元素

HTML

html
<label>
  Choose an ice cream flavor:
  <select class="ice-cream" name="ice-cream">
    <option value="">Select One …</option>
    <option value="chocolate">Chocolate</option>
    <option value="sardine">Sardine</option>
    <option value="vanilla">Vanilla</option>
  </select>
</label>

<div class="result"></div>

JavaScript

js
const selectElement = document.querySelector(".ice-cream");
const result = document.querySelector(".result");

selectElement.addEventListener("change", (event) => {
  result.textContent = `You like ${event.target.value}`;
});

結果

文字輸入元素

對於某些元素,包括 <input type="text">change 事件直到控制元件失去焦點時才會觸發。請嘗試在下面的欄位中輸入一些內容,然後單擊其他地方以觸發事件。

HTML

html
<input placeholder="Enter some text" name="name" />
<p id="log"></p>

JavaScript

js
const input = document.querySelector("input");
const log = document.getElementById("log");

input.addEventListener("change", updateValue);

function updateValue(e) {
  log.textContent = e.target.value;
}

結果

規範

規範
HTML
# event-change
HTML
# handler-onchange

瀏覽器相容性

不同瀏覽器在 change 事件是否應該為某些型別的互動觸發方面並不總是達成一致。例如,過去在 Gecko 中,使用 <select> 元素進行鍵盤導航時,在使用者按下 Enter 鍵或將焦點移出 <select> 之前,change 事件從未觸發(請參閱 Firefox bug 126379)。然而,自 Firefox 63 (Quantum) 起,所有主流瀏覽器中的此行為已保持一致。