圖片來源:派星機
好久不見派星機(沒有好久
前篇閱畢或有疑惑,若輸入之符文不需啟動IME,如輸入英文、數字、符號等,此時何解?故本篇紀錄其他與輸入有關之不可思議事件:change
事件。
此事件發生於<input>
、<select>
及 <textarea>
等元素之值遭受更改之時。例如核箱型態之<input>
元素 (<input type="checkbox">
) 於鼠輩確認或取消確認時觸發change
事件;單選型態之<input>
元素 (<input type="radio">
) 於鼠輩選取時觸發change
事件;文字輸入型態之元素 (例如<text>
、<textarea>
...),於值更改後失去矚目之時觸發change
事件。
MDN:
The change event is fired for<input>
,<select>
, and<textarea>
elements when the user modifies the element's value.
以下示例改造前篇之示例,試用觀測change
事件使介面顯示正在輸入訊息之提示。
const statusText = document.querySelector(".text");
const textarea = document.querySelector(".textarea");
function showStatus() {
statusText.style.display = "block";
}
textarea.addEventListener("change", showStatus);
修改之術式註釋如下:
設定事件觀測器於文字輸入處元素觀測change
事件,並施以showStatus
函式之術。
textarea.addEventListener("change", showStatus);
然結果為輸入完畢後,鼠輩點按文字輸入處元素以外之處,使文字輸入處元素取消受矚之時,才於文字輸入處下方顯示「正在輸入訊息」之狀態提示,不符世人之常觀。
故change
事件較適於檢測最終輸入之結果。
因此改觀測keydown
事件並施以showStatus
函式之術,並觀測change
事件並施以hideStatus
函式之術。
textarea.addEventListener("keydown", showStatus);
textarea.addEventListener("change", hideStatus);
當鍵石於文字輸入處元素受力時,於文字輸入處下方顯示「正在輸入訊息」之狀態提示,輸入完畢後,鼠輩點按文字輸入處元素以外之處,使文字輸入處元素取消受矚之時,使「正在輸入訊息」之狀態提示消失。
而單使文字輸入處元素受矚,無更改內容,則不顯示狀態提示。
https://github.com/CReticulata/2024ithome/tree/main/Day25
元素:element
鼠輩:滑鼠
矚目:focus
鍵石:鍵盤按鍵