
이벤트 등록의 기본 문법
[문서객체].addEventListener("이벤트명", 콜백함수);
이벤트 타겟 (Event Target)이벤트 타입 (Event Type)이벤트 핸들러 (Event Handler)이벤트 처리 예제: 버튼 클릭 이벤트
<button id="myButton">클릭하세요</button>
// 버튼 요소 선택
const button = document.getElementById('myButton');
// 클릭 이벤트 핸들러 정의
function handleClick() {
alert('버튼이 클릭됨');
}
// 버튼에 클릭 이벤트 리스너 추가
button.addEventListener('click', handleClick);
myButton ID를 가진 버튼 요소'click' (클릭 이벤트)handleClick 함수 (클릭 시 알림 표시)HTML 태그에 직접 이벤트 속성 지정으로 이벤트 처리 가능. 그러나 이 방식은 관심사 분리(Separation of Concerns) 원칙 미준수로 유지보수성 측면에서 지양됨
<button onclick="alert('버튼이 클릭되었습니다!')">클릭하세요</button>
onclick: 클릭 이벤트onmouseover: 마우스 오버 이벤트onkeydown: 키보드 키 다운 이벤트관심사 분리란?HTML(구조), CSS(스타일), JavaScript(동작)를 분리하여 코드의 유지보수성과 재사용성을 높이는 개념. 따라서 이벤트 처리는 가능하면 JavaScript 파일에서
addEventListener()사용이 권장됨
이벤트 핸들러 함수는 이벤트에 대한 상세 정보를 담은 이벤트 객체를 매개변수로 받음. 이를 통해 발생한 이벤트에 대한 다양한 정보 사용 가능
'click', 'keydown')$$li.forEach((li) => {
li.addEventListener('click', function (e) {
e.currentTarget.remove(); // 이벤트가 발생한 요소를 삭제
});
});
document.getElementById('myButton').addEventListener('click', function(event) {
console.log('이벤트 타입:', event.type);
console.log('타겟 요소:', event.target);
event.preventDefault(); // 기본 동작 방지
});
html
코드 복사
<button id="myButton">클릭하세요!</button>
<div id="output"></div>
<script>
const button = document.getElementById("myButton");
const output = document.getElementById("output");
button.addEventListener("click", function() {
output.textContent = "버튼이 클릭되었습니다!";
output.style.color = "green";
});
</script>
keydown은 키를 누르는 순간, keyup은 키를 뗄 때 발생=html
코드 복사
<input type="text" id="inputField" placeholder="여기에 입력하세요..." />
<div id="keyOutput"></div>
<script>
const inputField = document.getElementById("inputField");
const keyOutput = document.getElementById("keyOutput");
inputField.addEventListener("keydown", function(event) {
keyOutput.textContent = `누른 키: ${event.key}`;
});
inputField.addEventListener("keyup", function(event) {
keyOutput.textContent += ` (뗀 키: ${event.key})`;
});
</script>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>드래그 이벤트 예제</title>
<style>
#draggable {
width: 100px;
height: 100px;
background-color: blue;
cursor: move; /* 드래그 시 커서 변경 */
position: relative;
}
</style>
</head>
<body>
<div id="draggable" draggable="true">드래그 해보세요!</div>
<div id="status"></div>
<script>
const draggable = document.getElementById("draggable");
const status = document.getElementById("status");
draggable.addEventListener("dragstart", function(event) {
status.textContent = "드래그가 시작되었습니다!";
event.dataTransfer.setData("text/plain", "이것은 드래그 중입니다.");
});
draggable.addEventListener("dragend", function(event) {
status.textContent = "드래그가 종료되었습니다!";
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>폼 이벤트 예제</title>
<style>
#output {
margin-top: 20px;
color: blue;
}
</style>
</head>
<body>
<form id="myForm">
<label for="name">이름:</label>
<input type="text" id="name" placeholder="이름을 입력하세요" required>
<br>
<label for="email">이메일:</label>
<input type="email" id="email" placeholder="이메일을 입력하세요" required>
<br>
<button type="submit">제출</button>
</form>
<div id="output"></div>
<script>
const form = document.getElementById("myForm");
const output = document.getElementById("output");
// submit 이벤트 핸들러
form.addEventListener("submit", function(event) {
event.preventDefault(); // 기본 제출 동작 방지
const name = document.getElementById("name").value;
const email = document.getElementById("email").value;
output.textContent = `이름: ${name}, 이메일: ${email}이(가) 제출되었습니다.`;
});
// change 이벤트 핸들러
const nameInput = document.getElementById("name");
nameInput.addEventListener("change", function() {
output.textContent += ` 이름이 변경되었습니다: ${nameInput.value}`;
});
// input 이벤트 핸들러
nameInput.addEventListener("input", function() {
console.log(`현재 이름 입력: ${nameInput.value}`);
});
</script>
</body>
</html>
키보드 이벤트 시 특정 키를 식별할 수 있는 고유한 키 코드가 존재합니다. 주로 event.key나 event.code 속성을 사용하는 것이 권장됩니다.
document.addEventListener("keydown", function(event) {
if (event.keyCode === 13) {
console.log("엔터 키가 눌렸습니다!");
}
});
📚 다른 이벤트 정보는 여기 참고
출처: 수코딩