1. 이벤트 등록 방법
1. html 에 이벤트 등록
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1>이벤트</h1>
<hr />
<button onclick="m1()">클릭</button>
<div onclick="m2()">클릭2</div>
<script>
function m1() {
// window 객체는 생략 가능
window.alert("m1 호출됨");
}
function m2() {
// window 객체는 생략 가능
window.alert("m2 호출됨");
}
</script>
</body>
</html>

html에 이벤트를 등록하면 요소 자신이 자신을 지켜보면서 이벤트를 감지함
id가 바뀌는 경우가 생기면 이 방식이 좋다 예) 리액트
2. 자바스크립트로 이벤트 등록
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1>이벤트 리스너</h1>
<hr />
<button id="btn1">클릭</button>
<script>
let btn1 = document.querySelector("#btn1");
btn1.addEventListener("click", (e) => {
console.log(e);
alert("btn1 호출됨");
});
</script>
</body>
</html>

자바스크립트로 이벤트를 등록하면 외부의 스레드가 요소를 지켜보면서 이벤트를 감지함
2. 이벤트의 종류
1. 기본적인 이벤트
1. 클릭 이벤트
<button id="btn1">클릭</button>
<script>
// click
let btn1 = document.querySelector("#btn1");
btn1.addEventListener("click", (e) => {
console.log("click 이벤트:", e);
alert("btn1 클릭됨");
});
</script>

2. 더블클릭 이벤트
<button id="btn2">더블 클릭</button>
<script>
// dblclick
let btn2 = document.querySelector("#btn2");
btn2.addEventListener("dblclick", () => {
alert("btn2 더블 클릭됨");
});
</script>

3. 키보드 입력 이벤트
<input type="text" id="textInput" placeholder="키보드 입력해 보세요" />
<script>
// keyup
let input = document.querySelector("#textInput");
input.addEventListener("keyup", (e) => {
console.log("입력된 키:", e.key);
alert("키보드 입력 받음");
});
</script>

4. 변화 인벤트
<select id="selectBox">
<option value="">선택하세요</option>
<option value="apple">🍎 사과</option>
<option value="banana">🍌 바나나</option>
<option value="grape">🍇 포도</option>
</select>
<script>
// change
let select = document.querySelector("#selectBox");
select.addEventListener("change", (e) => {
console.log(e);
alert("선택한 값: " + e.target.value);
});
</script>

전체 코드
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>이벤트 예제</title>
</head>
<body>
<h1>이벤트 종류</h1>
<hr />
<!-- click -->
<button id="btn1">클릭</button>
<!-- dblclick -->
<button id="btn2">더블 클릭</button>
<!-- keyup -->
<input type="text" id="textInput" placeholder="키보드 입력해 보세요" />
<!-- change -->
<select id="selectBox">
<option value="">선택하세요</option>
<option value="apple">🍎 사과</option>
<option value="banana">🍌 바나나</option>
<option value="grape">🍇 포도</option>
</select>
<script>
// click
let btn1 = document.querySelector("#btn1");
btn1.addEventListener("click", (e) => {
console.log("click 이벤트:", e);
alert("btn1 클릭됨");
});
// dblclick
let btn2 = document.querySelector("#btn2");
btn2.addEventListener("dblclick", () => {
alert("btn2 더블 클릭됨");
});
// keyup
let input = document.querySelector("#textInput");
input.addEventListener("keyup", (e) => {
console.log("입력된 키:", e.key);
alert("키보드 입력 받음");
});
// change
let select = document.querySelector("#selectBox");
select.addEventListener("change", (e) => {
alert("선택한 값: " + e.target.value);
});
</script>
</body>
</html>
2. 폼 이벤트
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.hidden-box {
display: none;
}
.red-text {
font-size: 10px;
color: red;
}
</style>
</head>
<body>
<h1>폼 이벤트</h1>
<hr />
<form action="/join" onsubmit="return valid()">
<input type="text" id="password" /><br />
<input type="text" id="password-check" /><br />
<div id="pw-same" class="pw-box hidden-box red-text">
패스워드가 동일합니다
</div>
<div id="pw-not-same" class="pw-box hidden-box red-text">
패스워드가 동일하지 않습니다
</div>
<button type="submit">회원가입</button>
</form>
<script>
let pw = document.querySelector("#password");
let pwCheck = document.querySelector("#password-check");
function valid() {
if (pw.value == pwCheck.value) {
return true;
} else {
return false;
}
}
pw.addEventListener("keyup", (e) => {
if (pw.value == pwCheck.value) {
pw.readOnly = true;
document
.querySelector("#pw-same")
.classList.remove("hidden-box");
document
.querySelector("#pw-not-same")
.classList.add("hidden-box");
} else {
pw.readOnly = false;
document
.querySelector("#pw-same")
.classList.add("hidden-box");
document
.querySelector("#pw-not-same")
.classList.remove("hidden-box");
}
});
pwCheck.addEventListener("keyup", (e) => {
if (pw.value == pwCheck.value) {
pw.readOnly = true;
document
.querySelector("#pw-same")
.classList.remove("hidden-box");
document
.querySelector("#pw-not-same")
.classList.add("hidden-box");
} else {
pw.readOnly = false;
document
.querySelector("#pw-same")
.classList.add("hidden-box");
document
.querySelector("#pw-not-same")
.classList.remove("hidden-box");
}
});
</script>
</body>
</html>

Share article