본문 바로가기
프론트엔드/JavaScript

[자바스크립트] form, input 이벤트 핸들링

by CODESIGN 2022. 3. 12.

목표

입력된 값을 console에 뽑아 보기

 

html 파일 

 

<!DOCTYPE html>
<html lang="kr">
  <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>이벤트 핸들링</title>
  </head>
  <body>
    <div class="container">
      <h1 class="title">이벤트 헨들링</h1>
      <form id="form">
        <div class="form-container">
          <label for="drink-name" class="input-label"></label>
          <input
            type="text"
            id="menu-name"
            name="menuName"
            class="menu-input"
            placeholder="메뉴 이름"
          />
        </div>
      </form>
    </div>
    <script src="index.js"></script>
  </body>
</html>

 

html 결과

 

JavaScript 파일

 

// input 창에 입력된 값 읽어와 주게 설정을 해주었다.

function App() {
  document.querySelector('#menu-name').addEventListener('keypress', (e) => {
    console.log(e.key);
  });
}

// document.querySelector('') -> html에 있는 element를 찾을 수 있다.
// addEventListener('', (e)=>{}) -> 찾은 element에서 이벤트를 받아 올 수 있다.

 

입력창에 입력을 해도 console에 나타나지 않는다. 그 이유는 function App을 선언만하고 실행을 하지 않았기 때문이다.
 
function App() {
  document.querySelector('#menu-name').addEventListener('keypress', (e) => {
    console.log(e.key);
  });
}

App(); //function App() 실행

 

JavaScript 결과

 

 

이제 입력 창에 입력을 하면 console 창에 결과 값이 나온다. 하지만 한 번에 한문자씩 받아온다. 

 

나는 입력한 값 전체를 한 번에 받아 오고 싶다. 그러기 위해서 입력된 값이 "enter"키 일 때 입력 값을 들고 오게 설정을 해줘야 한다. 

 

입력한 값을 들고 오기 위해 value를 사용한다.

 

function App() {
  document.querySelector('#menu-name').addEventListener('keypress', (e) => {
    if (e.key === 'Enter') {
      console.log(document.querySelector('#menu-name').value);
    }
  });
}

App();

 

이제 입력 창에 입력을 하고 Enter을 누르면 console 창에 하나로 나타난다.  하지만 enter을 치면 화면이 새로 고침이 되고 있다.

 

그 이유는 form 태그 때문이다. form 태그는 기본적으로 웹 서버에 무언가를 전송하기 위한 태그이다.

 

그래서 enter키를 누르게 되면 자동으로 전송하는 동작을 브라우저에서 제공해서 enter을 누르게 되면 화면이 새로 고침이 된다.

 

그래서 enter키를 눌렀을 때 새로고침을 막기 위해서 form태그가 자동으로 전송되는 걸 막아 줘야 한다. 

 

form에 있는 id 값을 들고 와 막아 줬다. preventDefault() 메서드를 이용하면 enter키를 눌러도 자동으로 전송이 되지 않는다.

 

function App() {
  // from 태그가 자동으로 전송되는걸 막아준다.
  document.querySelector('#form').addEventListener("submit", (e) => {
    e.preventDefault(); 
  })

  // 메뉴를 입력 받는다.
  document.querySelector('#menu-name').addEventListener('keypress', (e) => {
    if (e.key === 'Enter') {
      console.log(document.querySelector('#menu-name').value);
    }
  });
}

App();

//preventDefault() -> enter키를 눌러도 자동으로 전송이 되지 않는다.

 

최종 결과

 

 

 

댓글