JavaScript의 이벤트 핸들링

JavaScript는 사용자와 웹 페이지 간의 상호작용을 처리하기 위해 이벤트 핸들링을 제공합니다. 이벤트는 클릭, 마우스 이동, 키보드 입력 등과 같은 사용자의 행동에 의해 발생합니다. 이 글에서는 JavaScript의 이벤트 처리 방식과 이벤트 리스너에 대해 설명하겠습니다.

1. 이벤트 처리 방식

이벤트를 처리하는 방식은 주로 세 가지로 나뉩니다:

1.1. HTML 속성을 사용한 방식

가장 기본적인 방식으로, HTML 요소에 직접 이벤트 핸들러를 추가하는 방법입니다.

<button onclick="alert('Button clicked!')">Click me</button>

1.2. DOM 요소의 이벤트 핸들러 속성을 사용하는 방식

JavaScript 코드 내에서 DOM 요소의 이벤트 핸들러 속성을 설정하는 방법입니다.

<button id="myButton">Click me</button>

<script>
    const button = document.getElementById('myButton');
    button.onclick = function() {
        alert('Button clicked!');
    };
</script>

1.3. addEventListener 메서드를 사용하는 방식

가장 권장되는 방식으로, addEventListener 메서드를 사용하여 이벤트 리스너를 추가하는 방법입니다.

<button id="myButton">Click me</button>

<script>
    const button = document.getElementById('myButton');
    button.addEventListener('click', function() {
        alert('Button clicked!');
    });
</script>

2. 이벤트 리스너

addEventListener 메서드는 이벤트 리스너를 등록하고 이벤트가 발생할 때 실행할 콜백 함수를 지정합니다.

2.1. 기본 사용법

addEventListener 메서드는 두 개의 인자를 받습니다: 이벤트 타입과 콜백 함수.

element.addEventListener('event', function);

예제:

<button id="myButton">Click me</button>

<script>
    const button = document.getElementById('myButton');
    button.addEventListener('click', function() {
        alert('Button clicked!');
    });
</script>

2.2. 이벤트 객체

이벤트가 발생할 때, 이벤트 객체가 자동으로 콜백 함수에 전달됩니다. 이벤트 객체는 이벤트에 대한 다양한 정보를 포함합니다.

<button id="myButton">Click me</button>

<script>
    const button = document.getElementById('myButton');
    button.addEventListener('click', function(event) {
        console.log('Button clicked at position: ', event.clientX, event.clientY);
    });
</script>

2.3. 여러 개의 이벤트 리스너

addEventListener를 사용하면 동일한 요소에 여러 개의 이벤트 리스너를 추가할 수 있습니다.

<button id="myButton">Click me</button>

<script>
    const button = document.getElementById('myButton');

    button.addEventListener('click', function() {
        console.log('First listener');
    });

    button.addEventListener('click', function() {
        console.log('Second listener');
    });
</script>

2.4. 이벤트 리스너 제거

removeEventListener 메서드를 사용하여 이벤트 리스너를 제거할 수 있습니다. 이를 위해서는 동일한 이벤트 타입과 콜백 함수를 지정해야 합니다.

<button id="myButton">Click me</button>
<button id="removeListener">Remove Listener</button>

<script>
    const button = document.getElementById('myButton');
    const removeButton = document.getElementById('removeListener');

    function handleClick() {
        alert('Button clicked!');
    }

    button.addEventListener('click', handleClick);

    removeButton.addEventListener('click', function() {
        button.removeEventListener('click', handleClick);
    });
</script>

3. 이벤트 전파

이벤트 전파에는 캡처링과 버블링이라는 두 가지 단계가 있습니다. 이벤트는 캡처링 단계에서 시작하여 버블링 단계로 전파됩니다.

3.1. 캡처링과 버블링

  • 캡처링 단계: 이벤트가 최상위 요소에서 시작하여 이벤트가 발생한 요소까지 내려갑니다.
  • 버블링 단계: 이벤트가 발생한 요소에서 시작하여 최상위 요소까지 올라갑니다.

기본적으로 이벤트는 버블링 단계에서 이벤트 리스너에 의해 처리됩니다.

3.2. 이벤트 전파 제어

이벤트 전파를 제어하기 위해 이벤트 객체의 메서드를 사용할 수 있습니다.

  • stopPropagation(): 이벤트가 더 이상 전파되지 않도록 합니다.
  • stopImmediatePropagation(): 현재 요소에 등록된 다른 이벤트 리스너도 실행되지 않도록 합니다.
<div id="parent">
    <button id="child">Click me</button>
</div>

<script>
    const parent = document.getElementById('parent');
    const child = document.getElementById('child');

    parent.addEventListener('click', function() {
        console.log('Parent clicked');
    });

    child.addEventListener('click', function(event) {
        console.log('Child clicked');
        event.stopPropagation(); // 부모 요소로 이벤트 전파 방지
    });
</script>

3.3. 이벤트 리스너 옵션

세 번째 인자로 옵션 객체를 전달하여 캡처링 단계에서 이벤트를 처리하도록 설정할 수 있습니다.

element.addEventListener('event', function, { capture: true });

예제:

<div id="parent">
    <button id="child">Click me</button>
</div>

<script>
    const parent = document.getElementById('parent');
    const child = document.getElementById('child');

    parent.addEventListener('click', function() {
        console.log('Parent clicked');
    }, { capture: true });

    child.addEventListener('click', function() {
        console.log('Child clicked');
    });
</script>

결론

JavaScript의 이벤트 핸들링은 웹 페이지에서 사용자와의 상호작용을 처리하는 데 필수적인 기능입니다. 이벤트 처리 방식과 이벤트 리스너를 잘 이해하고 활용하면 더욱 다이나믹하고 반응성이 뛰어난 웹 애플리케이션을 개발할 수 있습니다. 다양한 이벤트와 그 처리 방식을 익히고 실습하여, 실제 프로젝트에 적용해 보세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다