
버튼 클릭하면 클릭 "이벤트" 발생
이벤트가 발생했을 때 어떠한 액션을 위한 함수를 호출하는데
👉 이 함수가 바로 '이벤트 리스너'
<button onClick="sayHi()">
Click me
</button>
<script>
function sayHi() {
alert("Hi from inline HTML!");
}
</script>
<button id="btn">
Click me
</button>
<script>
const btn = document.getElementById("btn")
btn.onclick = function () {
alert("Hi from JS property!");
};
</script>
// 문서가 로드될 때 이 함수 실행
window.onload = function () {
// id가 "text"인 요소를 리턴
let text = document.getElementById("text");
text.innerHTML = "HTML 문서 loaded";
}


<button id="btn">
Click me
</button>
<script>
const btn = document.getElementById("btn");
btn.addEventListener("click", function () {
alert("Hi from addEventListener!");
});
</script>
| 방법 | 설명 | 장점 | 단점 |
|---|---|---|---|
| ① HTML 속성( ) | 태그 안에 직접 작성 | 간단하고 빠르게 테스트 할 때 좋음 | JS와 HTML이 섞여서 유지보수 불편 |
| ② JS 프로퍼티( element.onclick = ) | JS 코드에서 함수 할당 | 구조 분리, 기본적 사용 OK | 한 개만 등록 가능( 이전 핸들러 덮어씀 ) |
| ③ addEventListener | JS 코드에서 표준 방식 | 여러 개 이벤트 등록 가능, 제거도 가능 | 문법이 조금 더 길어짐 |
const buttonElement = document.querySelector('.btn');
buttonElement.addEventListener('click', handleClick)
function handleClick(event) {
let val = event;
console.log(val);
}
val = event.target;

val = event.target.id;
// 아무것도 출력 안 됨 ( 해당 요소에 id가 없기 때문 )
val = event.target.className;
// 출력 : btn( 요소의 클래스 이름이 출력 )
...
<button class="btn a">
버튼
</button>
val = event.target.classList;

val = event.type;
// 출력 : click( 이벤트가 어떤 타입인지 )
val = event.clientY;

val = event.clientX;

val = event.offsetY;

val = event.offsetX;

const submitBtn = document.querySelector('.submit-btn'); // submit 버튼
const container = document.querySelector('form'); // form 태그
const title = document.querySelector('h2'); // Title
// click
submitBtn.addEventListener('click', handleEvent)
// e => event 객체
function handleEvent(e) {
// form 제출 시 페이지 새로고침(리프레시) 방지하기 위한 것
e.preventDefault();
console.log(`Event Type: ${e.type}`);
}

submitBtn.addEventListener('dblclick', handleEvent)
function handleEvent(e) {
e.preventDefault();
console.log(`Event Type: ${e.type}`);
}

submitBtn.addEventListener('click', handleEvent)
submitBtn.addEventListener('mousedown', handleEvent)
function handleEvent(e) {
e.preventDefault();
console.log(`Event Type: ${e.type}`);
}

submitBtn.addEventListener('click', handleEvent)
submitBtn.addEventListener('mousedown', handleEvent)
submitBtn.addEventListener('mouseup', handleEvent)
function handleEvent(e) {
e.preventDefault();
console.log(`Event Type: ${e.type}`);
}
submitBtn.addEventListener('mouseenter', handleEvent)
function handleEvent(e) {
e.preventDefault();
console.log(`Event Type: ${e.type}`);
}
submitBtn.addEventListener('mouseleave', handleEvent)
function handleEvent(e) {
e.preventDefault();
console.log(`Event Type: ${e.type}`);
}
submitBtn.addEventListener('mousemove', handleEvent)
function handleEvent(e) {
e.preventDefault();
console.log(`Event Type: ${e.type}`);
}


const form = document.querySelector('form');
const emailInput = document.getElementById('email');
const title = document.querySelector('h2');
form.addEventListener('submit', handleEvent)
function handleEvent(e) {
e.preventDefault();
console.log(`Event Type: ${e.type}`);
}


// form 태그 요소를 선택 (submit 이벤트 감지용)
const form = document.querySelector('form');
// id가 "email"인 input 요소 선택 (이메일 입력창)
const emailInput = document.getElementById('email');
// h2 요소 선택 (입력값을 여기에 표시하려고 함)
const title = document.querySelector('h2');
// form이 제출되면 handleEvent 함수 실행
form.addEventListener('submit', handleEvent);
// 이메일 입력창에서 키를 누를 때 handleEvent 함수 실행
emailInput.addEventListener('keydown', handleEvent);
// 이벤트가 발생했을 때 실행되는 함수
function handleEvent(e) {
// 기본 동작(예: 폼 제출 시 새로고침)을 막음
e.preventDefault();
// 이벤트 종류 출력 (예: 'submit' 또는 'keydown')
console.log(`Event Type: ${e.type}`);
// 입력된 값을 h2 텍스트로 설정하려고 함
title.innerText = e.target.value;
}

if (e.type === 'submit') {
e.preventDefault();
}



const form = document.querySelector('form');
const emailInput = document.getElementById('email');
const title = document.querySelector('h2');
// keydown -> 키를 눌렀을 때
emailInput.addEventListener('keydown', handleEvent);
// keyup -> 키를 눌렀다가 뗐을 때
emailInput.addEventListener('keyup', handleEvent);
// keypress -> 키의 문자가 입력되었을 때
emailInput.addEventListener('keypress', handleEvent);
function handleEvent(e) {
console.log(`Event Type: ${e.type}`);
if (e.type === 'submit') {
e.preventDefault();
}
title.innerText = e.target.value;
}

emailInput.addEventListener('focus', handleEvent);
function handleEvent(e) {
console.log(`Event Type: ${e.type}`);
if (e.type === 'submit') {
e.preventDefault();
}
title.innerText = e.target.value;
}

emailInput.addEventListener('focus', handleEvent);
emailInput.addEventListener('blur', handleEvent);
function handleEvent(e) {
console.log(`Event Type: ${e.type}`);
if (e.type === 'submit') {
e.preventDefault();
}
title.innerText = e.target.value;
}
emailInput.addEventListener('cut', handleEvent);
function handleEvent(e) {
console.log(`Event Type: ${e.type}`);
if (e.type === 'submit') {
e.preventDefault();
}
title.innerText = e.target.value;
}
emailInput.addEventListener('paste', handleEvent);
function handleEvent(e) {
console.log(`Event Type: ${e.type}`);
if (e.type === 'submit') {
e.preventDefault();
}
title.innerText = e.target.value;
}
emailInput.addEventListener('input', handleEvent);
function handleEvent(e) {
console.log(`Event Type: ${e.type}`);
if (e.type === 'submit') {
e.preventDefault();
}
title.innerText = e.target.value;
}