본문 바로가기

Javascript

[새싹 프론트엔드] 4주차 - 5

이벤트 기초 및 활용

 

이벤트 개요

이벤트

마우스 클릭, 키보드 입력 등 사용자의 입력 행위나 문서 또 는 브라우저의 상태 변화를 자바스크립트 코드에게 알리는 통지

 

이벤트 리스너

발생한 이벤트에 대처하기 위해 작성된 자바스크립트 코드

 

이벤트 종류

HTML5에서 이벤트 종류는 70여개

이벤트 리스너 이름은 이벤트 이름 앞에 ‘on’을 붙인다.

 

주요 이벤트 리스너

이벤트 리스너 이벤트가 발생하는 경우
onkeydown 사용자가 아무 키나 누르는 순간
onkeyup 사용자가 누른 키를 놓는 순간
onclick 사용자가 객체를 클릭할 때
ondblclick 객체에 더블 클릭할 때
onmousedown 마우스 버튼이 눌러지는 순간
onmouseover 마우스 커서가 객체 안으로 들어가는 순간
onmouseup 눌러진 마우스 버튼을 놓는 순간
onwheel 마우스 휠을 굴리는 순간
onchange <input><select>등의 텍스트나 선택된 내용 등이 변할 때
onsubmit 사용자가 submit 버튼을 클릭하여 폼을 전송할 때
onload 문서나 이미지의 로딩이 완료된 직 후

 

이벤트 리스너 만들기

1. HTML 태그 내에 작성

2. DOM 객체의 이벤트 리스너 프로퍼티에 작성

3. DOM 객체의 addEventListener() 메소드 이용

 

1. HTML 태그 내에 이벤트 리스너 작성

- HTML 태그의 이벤트 리스너 속성에 리스너 코드 직접 작성 

 

실습) <p>태그에 마우스 올리면 orange, 내리면 흰색으로 배경색 변경

 

2. DOM 객체의 이벤트 리스너 프로퍼티에 작성

함수의 이름만 넣어야함 소괄호 입력X

 

 

실습) DOM 객체의 이벤트 리스너 프로퍼티에 작성

 <body onload="init()"> //body에 onload를 해줌 
      <h3>DOM 객체의 이벤트 리스너 프로퍼티에 함수 등록</h3>
      <hr />
      <p id="p">마우스 올리면 orange 색으로 변경</p>
    </body>
    <script>
      function init() {
      //문서가 완전히 로드되었을 때 호출
      	p = document.getElementById("p");
     	p.onmouseover = over; //over()를 onmouseover 리스너로 등록
      	p.onmouseout = out;
      //out()를 onmouseout 리스너로 등록
     }
     function over() {
      	p.style.backgroundColor = "orange";
     }
     function out() {
     	p.style.backgroundColor = "white";
     }

 

3. DOM 객체의 addEventListener() 메소드 활용

addEventListener() 메소드

_.addEventListener (이벤트 이름, 실제 실행할 함수이름) - 매개변수 2개 사용

 

 <body onload="init()"> //body에 onload를 해줌 
      <h3>DOM 객체의 이벤트 리스너 프로퍼티에 함수 등록</h3>
      <hr />
      <p id="p">마우스 올리면 orange 색으로 변경</p>
 <script>
//   DOM 객체의 addEventListener() 메소드 활용
      var p;
      function init() {
        //문서가 완전히 로드되었을 때 호출
        p = document.getElementById("p");
        p.addEventListener("mouseover", over); //over()를 onmouseover 리스너로 등록
        p.addEventListener("mouseout", out); //over()를 onmouseover 리스너로 등록
      }
      function over() {
        p.style.backgroundColor = "orange";
      }
      function out() {
        p.style.backgroundColor = "white";
      }
 </script>   
 </body>

 

★ 익명 함수로 이벤트 리스너 작성

익명 함수(anonymous function)

- 함수에 이름을 붙이지 않고 필요한 곳에 함수의 코드를 바로 작성 (코드가 짧거나 한 곳에서만 사용하는 경우)

 

예)

• 코드가 짧거나 한 곳에서만 사용하는 경우, 익명 함수 편리

 

실습) 익명 함수로 이벤트 리스너 작성

<script>
// 익명함수 - 코드가 짧거나 한곳에서만 사용할 경우 딱 여기서만 사용 가능 
// 이름이 없기 때문에 p.onmouseover만 사용 가능
      var p;
      function init() {
        //문서가 완전히 로드되었을 때 호출
        p = document.getElementById("p");
        p.onmouseover = function () {
          //익명함수
          this.style.backgroundColor = "orange";
        };
        p.addEventListener("mouseout", function () {
          this.style.backgroundColor = "white";
        });
      }
</script>

 


이벤트 객체(event object)

발생한 이벤트에 관련된 다양한 정보를 담은 객체

    • mousedown 이벤트의 경우, 마우스 좌표와 버튼 번호 등

    • keydown 이벤트의 경우, 키 코드 값 등

* 이벤트가 처리되고 나면 객체 소멸

이벤트 객체 전달받기

이벤트 리스너 함수의 첫 번째 매개변수에 전달

* 함수이름 내 맘대로 정할 수 있음

 

 

실습) 익명 함수로 이벤트 리스너 작성

<body>
    <p id="p">마우스를 올려보세요</p>
    <button onclick="eventFunction(event)">클릭하세요</button>
    <script>
        //첫 번째 매개변수
        // => event 정보를 담은 객체
        //   => 필요하면 작성, 내부적으로 이름을 풀어헤쳐서 작업을 하고 싶을 때 필요없으면 안 써도됨 매개 변수니까 이름 원하는대로
        // 일반적으로 소문자 e라고 저장함
      function eventFunction(e) {
        // e는 현재 발생한 이벤트의 정보를 담은 객체가 저장되어 있음
        console.log(e);
        alert(e.type); // 이벤트 종류 출력
      }
      document.getElementById("p").onmouseover = eventFunction;
    </script>
  </body>

 

 

실습) onclick 리스너로 계산기 만들기

<body>
    <h1> onclick, 계산기 만들기</h1>
    <hr>
    <p>계산하고자 하는 수식을 입력하고 계산 버튼 ㄱ</p>
    
    <form>
    식<input type="text" id="exp" value=""><br>
     
    값<input type="text" id="result">
    <input type ="button" value="계산" onclick="calculate()">
	</form>

	<script>
    	function calculate(){
            var exp = document.getElementById("exp")
            var result = document.getElementById("result");
            result.value = eval(exp.value);
    	}
	</script>
</body>

 

결과)

 


문서의 로딩 완료와 onload

onload

• window 객체에 발생

• 웹 페이지의 로딩 완료 시 호출되는 이벤트 리스너

 

작성 방법

2번을 일반적으로 사용

 

실습) onload

<body
    onload="alert('이 사이트는 2022년 12월 부터 www.js.co.kr로 옮겨집니다.')"
  >
    <h1>HTML 문서의 로딩 완료, onload</h1>
    <hr />
    이 페이지는 omload 리스너의 사용 예를 보여줍니다. 이 페이지가 출력되고 난
    바로 직후 onload 리스너를 통해 경고창을 출력합니다.
  </body>

 

결과)

 


라디오버튼과 체크박스

라디오버튼 객체

<input type="radio">로 만들어진 라디오 버튼 DOM 객체

라디오 버튼 객체들 알아내기

• getElementsByName()으로 name 속성의 값 알아내기

name 속성이 같은 태그를 모두 찾아 컬렉션을 리턴 (name을 일치시켜줘야 함)

 

 <body>
    <h3>버튼을 클릭하면 선택된 라디오 버튼의 value를 출력합니다.</h3>
    <hr />
    <form>
      <input type="radio" name="city" value="seoul" checked /> 서울
      <input type="radio" name="city" value="busan" checked /> 부산
      <input type="radio" name="city" value="chunchen" checked /> 춘천
      <input type="button" value="find checked" onclick="findChecked()" />
    </form>
    <script>
      function findChecked() {
        var found = null;
        var kcity = document.getElementsByName("city");
        kcity.forEach((item) => {
          if (item.checked == true) found = item;
        });
      }
    </script>
  </body>

 

결과)

 

 

실습) 선택된 체크박스 알아내기

<body>
    <h3>물품을 선택하면 금액이 자동 계산됩니다.</h3>
    <hr />
    <form>
      <input
        type="checkbox"
        name="hap"
        value="10000"
        onclick="calc(this)"
      />모자 1만원
      
      <input
        type="checkbox"
        name="shose"
        value="30000"
        onclick="calc(this)"
      />구두 3만원
      
      <input
        type="checkbox"
        name="bag"
        value="80000"
        onclick="calc(this)"
      />명품가방 8만원
      
      <br />
      
      지불하실 금액 <input type="text" id="result" value="0" />
    </form>
    
    <script>
      var sum = 0;
      function calc(cBox) {
      //굳이 cBox.checked==true라고 할 필요 없음
        if (cBox.checked) sum += parseInt(cBox.value);
        else sum -= parseInt(cBox.value);
        document.getElementById("result").value = sum;
      }
    </script>
  </body>

 


select 객체와 onchange

select 객체는 <select>태그로 만들어진 콤보박스

• option 객체는 태그로 표현되는 옵션 아이템

• 선택된 옵션 알아내기

select 객체와 onchange

• 옵션 선택

_.selectedIndex

 

• select와 onchange 리스너

   선택된 옵션이 변경되면 select 객체의 onchange 리스너 호출

 

실습) select 객체

<body>
    <h3>select 객체에서 선택한 과일 출력</h3>
    <hr />
    <p>과일을 선택하면 이미지가 출력됩니다.</p>
    <form>
      <select id="fruits" onchange="drawImage()">
        <option value="images/strawberry.png">딸기</option>
        <option value="images/banana.png" selected>바나나</option>
        <option value="images/apple.png">사과</option>
      </select>

      <img id="fruitimage" src="images/banana.png" alt="" />
    </form>
  </body>

 

결과)