CustomEvent 客製一個 addEventListener
本篇大綱
本篇要解決的問題
之前 August 在公司寫了一整包會員登入的功能,原本以為如果有其他前端,只要知道員會登入了沒就可以,直到最近二位前端也進來要使用功能了,才發現需要寫一些事件出來讓他們二位可以監聽, 因為他們必須 in 登入的中間做些其它事.
我們很常在寫像是以下的監聽事件:
window.addEventListener('load', () => {}')
但,很少在寫自己的事件,好啦,是 August 本人還沒寫過 XD.
本篇就是實作一個自己的事件出來,主要參考文件:
MDN:CustomEvent
製作一個 Demo
先來製作一個 Demo 來實作,Demo 的內容是會有一個 input,當 input 裡面輸入了 letswrite 時,按下「確認」按鈕後就會 alert 一個現在的時間.
Demo 的部份 August 直接在寫 CodePen 上:
https://codepen.io/letswrite/pen/OJxZJYq
커스텀 이벤트
CustomEvent 관련 정보:
const event = new CustomEvent("custom_event_name", {
detail: '可以傳出去的值'
});
document.dispatchEvent(event);
要監聽 我們上面這段註冊的事件是這樣:
document.addEventListener('custom_event_name', e => {
console.log(e.detail); // => 可以傳出去的值
})
custom_event_name
:就是自己取一個事件的名稱,取一個看了知道是做什麼的名稱就行.detail
:是當事件被觸發時,可以傳出去的值,上面的範例是偷懶寫成:detail: '可以傳出去的值'
實際上也可以傳更多的資料出去,像這樣:
detail: {
name: "Let's Write",
uri: "https://www.letswrite.tw",
author: "August"
}
CodePen에서 August 寫的範例是把當下的時間給傳出去.
CustomEvent
的 option 還有很多的參數可以用,就請各位自行去看 MDN 的文件囉.에서 要的地方註冊客製事件
會 這段算是 August 給自己的一個紀錄,在看文件時,不知道為什麼就是熊熊轉不過來,不知道
CustomEvent
是要放哪?想說有可能看到逽來,不知道 obj
是要放哪?想說有可能看到逽䀽種困擾,就寫了這段.因為上面範例程式碼的那行:
document.dispatchEvent(event);
에서 문서상에 是寫:
obj.dispatchEvent(event);
想了
document
是要寫什麼想了老半天,為了在以後回頭看這篇時可以立馬搞懂,範例上才會直接寫為 obj
.結果,把
document
寫上 input
後,一開始熊熊轉不過來的地方就又熊熊轉了過來(熊好忙 XD).那要把我們想監聽的客製事件放在哪呢?就放在「做了什麼事情時」的那邊.
CodePen에서 데모,是當
CustomEvent
const input = document.getElementById('input');
const btn = document.getElementById('button');
btn.addEventListener('click', e => {
let value = input.value;
// 當 input 被輸入了 letswrite 時
if(value === 'letswrite') {
// 註冊客製事件
let eventDemo = new CustomEvent('letswrite', {
detail: new Date()
})
document.dispatchEvent(eventDemo)
}
})
鏘鏘!就是這樣,喵~~
Reference
이 문제에 관하여(CustomEvent 客製一個 addEventListener), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/letswrite/customevent-ke-zhi-ge-addeventlistener-3njh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)