function buildAlert(title, message){
const $alert = document.createElement('div');
const id = Math.ceil(Math.random() * 1000);
console.log(id);
$alert.className = 'alert';
const $span = document.createElement('span');
$span.classList.add('close');
$span.innerHTML = '×';
const $h3 = document.createElement('h3');
$h3.textContent = title;
const $p = document.createElement('p');
$p.textContent = message;
$alert.appendChild($span);
$alert.appendChild($h3);
$alert.appendChild($p);
$alert.id = id;
$alert.querySelector('span.close')
.addEventListener('click', e=>{
const closeEvt = new CustomEvent('close', {
bubbles : true,
detail : {id, message}
});
$alert.dispatchEvent(closeEvt);
$alert.remove();
});
document.body.prepend($alert);
return $alert;
}
document.getElementById('order-btn')
.addEventListener('click',e=>{
const $alert = buildAlert('에러', '로그인 해 주세요.');
$alert.addEventListener('close',e=>{
console.log(e.detail);
console.log('error 창을 닫습니다.');
})
});
여튼 중요한 부분은
.addEventListener('click', e=>{
const closeEvt = new CustomEvent('close', {
bubbles : true,
detail : {id, message}
});
$alert.dispatchEvent(closeEvt);
$alert.remove();
});
CustomEvent(이벤트종류, 이벤트옵션에대한객체)
이벤트대상.dispatchEvent(커스텀이벤트)
커스텀이벤트 등록할 때는 dispatchEvent() 써야 함.
'프론트엔드-코드 > Javascript' 카테고리의 다른 글
현재 문서 정보 (0) | 2023.09.27 |
---|---|
Form 객체 (0) | 2023.09.26 |
가장 가까운 조상 찾기 (0) | 2023.09.26 |
기본 이벤트 막기 (ex:우클릭 콘텍스트메뉴) (0) | 2023.09.26 |
부모 이벤트까지 실행되는 이벤트 전파 막기( 버블링 방지 ) (0) | 2023.09.26 |