본문 바로가기
CodeIt_Sprint/JavaScript_중급

(4)JavaScript중급_3_1_이벤트핸들러 등록

by 코잼민 2024. 11. 13.

⊙ 이벤트 핸들러 :

#알아야 할 개념 :

● 개념1 : 이벤트 핸들러 등 방법

○ 방법1 : 요소노드onclick프로퍼티에 함수 할당, 선언

const element = document,querySelector('tag'); //요소노드 변수에 저장
 
  element.onclick = function ()//요소노드의 onclick 프로퍼티에 함수 선언
  {
  	console.log('함수 호출');
  };

○ 방법2 : 함수 선언 후 => 요소노드프로퍼티 메소드 addEventListener()에 할당, 선언

const element = document,querySelector('tag'); //요소노드 변수에 저장
 
function printBtn() //별도의 함수 선언
{
	console.log('버튼을 눌렀어요');
}

element.addEventListener('click', printBtn); //addEventListener메소드로 요소노드의 이벤트메소드 할당

● 개념2 : addEventListener() / removeEventListener() 매개인자와 사용 예시 2개

○ addEventListener('이벤트' , 메소드 이름 (,true) );

- '이벤트' :요소노드에 어떤 동작에 대해 함수를 적용할 건지를 결정함 // 클릭 : 'click' , 키보드 입력 : 'keydown' 등등

- 매소드 이름 : 동작을 했을 시, 어떤 작동이 일어나는 지를 위에서 또는 매개인자에 직접 구현, 선언 ;

선언 예시 2개

- Ex1 : 위에서 선언 후,addEventListener() 매개인자에 메소드 이름을 대입 //이방법을 더 선호할래

const element = document,querySelector('tag'); //요소노드 변수에 저장
 
function printBtn() //별도의 함수 선언
{
	console.log('버튼을 눌렀어요');
}

element.addEventListener('click', printBtn); //addEventListener메소드로 요소노드의 이벤트메소드 할당

- Ex2 : 매개인자에서 직접 핸들링 구현, 등록

const element = document,querySelector('tag'); //요소노드 변수에 저장

//addEventListener() 매게인자에 직접 핸들링 구현, 등록
element.addEventListener('click', function(){
	console.log('click!!');
});

 

● ▲개념3 : 이벤트 메소드 할당(add), 삭제(remove)

○ 개념3_1 : onclick프로퍼티으로 등록되는 이벤트 핸들러 공간 ≠ addEventListener() 로 등록되는 이벤트 핸들러 공간

Ex_

<!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>
  <button type="button">버어엉어튼</button>
  <script>
    const btn = document.querySelector('BUTTON');

    function func1()
    {
      console.log('function1');
    }

    function func2()
    {
      console.log('function2');
    }


    btn.onclick = func1; //onclick에는 function1 핸들러 등록

    btn.addEventListener('click',func2); //addEventListener에는 function2 핸들러 등록
    

  </script>
</body>
</html>

=> 결과 : 왼쪽 마우스 클릭으로, 버튼을 누를 시 , 둘다 작동된다.

○ 개념3_2 : onclick에는 핸들러 딱 하나밖에 할당 vs addEventListener는 여러개의 핸들러 등록 가능

○ 개념3_3 : removeEventListener로 등록해제는 addEventListener로 등록된 핸들러들만 해제 가능

즉,  onclick에 등록된 핸들러는  removeEventListener로 불가능

○ 개념3_4 : [개념2]의 방법2인 이벤트 핸들러 직접 구현으로 추가했을 시, removeEventListener로 등록해제 불가능하다.

 

◎ 연습문제1 :

  최종 출력 결과 :

<button id="btn">Click!</button> //btn의 태그 내용 출럭

  설명 :

①. btn 요소노드의 이벤트는 onclick으로 'click!' 출력 메소드로 등록

②. onclick으로 printBtn()로 등록, //이때 "click!"출력 메소드는 사라짐

③. removeEventListener는 addEventListener로 등록한 이벤트 핸들링은 없으므로, 의미 x

◎ 연습문제2 :

const btn = document.querySelector('#btn');

function printBtn() {
  console.log(btn.outerHTML);
}
  
function printHi() {
  console.log('Hi!');
}
 
btn.addEventListener('click', printBtn);
btn.removeEventListener('click', printHi);
btn.addEventListener('click', printHi);
btn.addEventListener('click', function() {
  console.log('click!');
});
btn.removeEventListener('click', function() {
  console.log('click!');
});

  최종 출력 결과 :

<button id="btn">Click!</button> //btn의 태그 내용 출럭

Hi!

click!