본문 바로가기
  • Coding & Book
학습단/HTML+CSS+Javascript 학습단

12-3장 문서 객체 모델과 이벤트 다루기

by 루이3 2023. 3. 29.

공부할 내용 (487~522쪽)

 

1. form 조작하기

 

- form 태그 선택하기

HTML 폼 요소의 시작은 항상 form 태그이다.

 

-form 속성 사용하기

document 객체의 forms 속성은 모든 form 태그의 노드 정보를 HTMLCollection 객체에 담아 반환한다.

 

-name 속성 사용하기

form 태그에 name 속성을 사용하면 form 속성보다 직관적으로 form 요소 노드를 선택할수 있다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form name="frm1">
      <input type="text">
    </form>
    <form name="frm2">
      <input type="text">
    </form>
    <form name="frm3">
      <input type="text">
    </form>
  </body>
</html>

 

-폼 요소 생각하기

폼요소에는 선택할때는 elements 속성이나 name 속성을 사용한다.

 

-폼 요소 입력값 다루기

폼 요소는 사용자에게 값을 입력받아 이를 서버에 전달한다.

전달받은 값을 서버에 전달하기까지 폼 요소에 입력된 값이 유효한지 검증할수 있어야 한다.

 

2. 이벤트 다루기

이벤트는 웹 브라우저와 사용자 사이에 상호작용이 발생하는 특정 시점을 의미한다.

 

간단한 예시들)

onclick - 마우스를 클릭하면 발생한다.

ondbclick - 마우스로 빠르게 두번 클릭하면 발생한다.

onwheel - 마우스 휠을 움직이면 발생한다.

onkeyup - 키보드 버튼을 눌렀다가 뗀순간 발생한다.

onkeydown - 키보드 버튼을 누른 순간 발생한다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form>
      <input type="text" onfocus="focusEvent()" onblur="blurEvent()">
    </form>
    <script>
      function focusEvent(){
        console.log("focus on");
      }
      function blurEvent(){
        console.log("focus out");
      }
    </script>
  </body>
</html>

 

 

3. 이벤트 객체 와 this

이벤트 객체는 이벤트 타입에 따라 발생하는 이벤트의 각종 정보가 들어 있는 객체 집합이다.

 

-이벤트 객체 사용하기

예시)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button>클릭</button>
    <script>
        const btnEl = document.querySelector("button");
        btnEl.addEventListener("click", function () {
            console.log("hi")
        })
    </script>
</body>

</html>

-이벤트 취소하기

preventDefault() 메서드를 사용하면 태그에 기본으로 연결된 이벤트를 취소할수 있다.

 

-this 키워드 사용하기

이벤트 함수 내부에서 this 키워드를 사용하면 이벤트가 발생한 요소 노드를 바로 가리킬 수 있다.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <p>1번</p>
    <p>2번</p>
    <script>
      const pEls = document.querySelectorAll("p")
      pEls.forEach((el)=>{
        el.addEventListener("click", function(){
          console.log(this);
        });
      })
    </script>
  </body>

</html>