본문 바로가기
자바과정/자바스크립트

바닐라 자바스크립트 - Input과 Button

by Parkej 2021. 9. 24.
더보기

출처 및 참고 : 

 - https://nomadcoders.co/

본 포스팅은 노마드 챌린지의 무료 강의를 참고해 포스팅 하였습니다. 

 

본격적인 앱 만들기 강의에 들어갔다. 

그래도 기초적인 부분은 다뤄야 하니 input과 button을 이용한 value를 테스트하는 시간을 가져보자 

 

 

Input과 Button

# 설계

- 앱이 사용자에게 질문한다. 너는 누구인가? (이름, ... 등등)
- 해당 정보를 어떻게 받아올 것인가
- 받아온 정보를 어떻게 화면에 보여줄 것인가.

 

* 기초원리

user의 이름을 기억하는 것처럼 JavaScript에는 value(값)를 기억하게 하는 아주 쉬운 방법이 있다. 

하지만 모든 것은 HTML에서 시작되어야 한다. HTML을 작성한 다음 그 안에 존재하는 element들을 가져오는 원리이다. 

그리고 JavaScript에서 요론저런 작업들을 해주는 것

 

 

코드를 작성해보자 .

 

 

HTML (index)

<!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">
    <link rel="stylesheet" href="style.css"/>
    <title>Momentum App</title>
</head>
<body>

    <!-- id : login-form, ID input and Button Create-->
    <div id="login-form">
        <input type="text" placeholder="Your name"/>
        <button>Log In</button>
    </div>
    <!-- id : login-form, ID input and Button Create End-->


    <!-- Js Begin -->
    <script src="app.js"></script>
    <!-- Js End -->
</body>
</html>
- input, button 생성
- <div> 태그로 감싸기
- div 태그에 class or id 지정 ("login-form")
 * class나 id나 상관없지만 여기서 사용한 classname을 다시 사용하면 안된다는 것만 참고해두자.

 

JavaScript (app)

// querySelector(), getElementById() 로 element 가져오기
const loginForm = document.getElementById("login-form");
// const loginForm = document.querySelector("#login-form");
// classname, tagname 모두 검색이 가능하기 때문 

// element를 접근
const loginInput = loginForm.querySelector("input");
const loginButton = loginForm.querySelector("button");
- querySelector(), getElementById() 로 element 가져오기
- querySelector()는 대상이 id인가 명확히 작성해줘야 한다. (classname, tagname 모두 검색이 가능하기 때문 )
- input과 button을 가져와야 한다. (2가지 옵션)
 1. const logiInput 에 document를 찾는 대신 위에 작성한 loginForm에서 검색을 하는 방법 (현재 방법)
 2. document를 이용해 한번에 찾는 방법

 

실행결과

 

흐름

 - HTML에서 form을 찾고 있다. document.getElementById()를 통해서..
 - JS가 이것을 찾았다면 loginForm은 HTML 내에 있는 element라는 뜻이다. (html에서 div태그로 감싸진 녀석들)
 - 해당 element를 js로 끌고오고 input과 button을 찾아야 한다.
 - 그리고 이것을 document가 아닌 loginForm안에서 바로 찾을 수가 있다.
 - 보다시피 loginForm은 HTML element이다. 즉, HTML element 안을 바로 검색 가능하다는 얘기이다. (정밀조사)
 - 우선 login-form이라는 id를 찾았고 그 안에서 input과 button을 찾았다.

 

이제 user가 해당 button을 클릭할 때 감지하는 방법을 알아냈다. 
해당 방법을 가지고 value 값을 저장해야 하는데 button을 누르면 기억나는것이 있을것이다.
바로 click event를 이용하는 것이다. 

 

참 들어가기 전에 코드를 약간 변경하도록 하겠다. (JS만)

 - 위에서 사용했던 JavaScript 코드는 지우고 아래꺼로 교체하도록 하자. 

const loginInput = document.querySelector("#login-form input");
const loginButton = document.querySelector("#login-form button");

 

 

버튼을 눌렀을때 addEventListener로 감지가 가능하도록 해보자.

 

JavaScript

const loginInput = document.querySelector("#login-form input");
const loginButton = document.querySelector("#login-form button");

function onLoginBtnClick(){
    console.dir(loginInput);
    console.log("click!");
}

loginButton.addEventListener("click", onLoginBtnClick)

 

실행

 

콘솔에 나오는 것을 확인할 수 있다. 

 

그리고 이렇게 click event를 생성하고 함수 안에 console.dir(loginInput)을 써 element의 object들을 확인해보자 
여기서 봐야할것은 아래로 쭉 내려 보이는 value property이다. 

 

 

 

loginInput안에 들어간 data가 value에 표시된다. 우리는 이것을 console로 출력이 되도록 바꾸어보자

우리는 input안에 value 프로퍼티 값을 가져올 것이다. 

console.dir(loginInput.value);

 

- 이렇게 버튼(loginButton)을 눌러 event를 발생시키면 loginInput안에 들어간 value(값)을 확인 가능하다. 

 

우리는 이제 이런식으로 input의 value를 얻게되는 방법을 알게 되었다. 

 

hello랑 같이 입력한 값을 출력하게 소스를 수정해보자.

 

function onLoginBtnClick(){
    console.log("hello",loginInput.value);
}

 

이렇게 잘 나오는 것을 확인했다

 

그런데 이건 문제가 하나 있다.
console.log("hello", loginInput.value); 를 한다고 했을 때
콘솔창에 보면 hello + value가 표시된다. 여기까지는 괜찮은데 
문제는 아무런 값도 입력하지 않았을 때이다.

 

우리는 user가 이름을 입력했을 때만 button을 클릭해 값을 저장하게 만들고 싶기 때문이다. 

if, else를 활용해서 만들어보자 

(미리연습겸)

 

const loginInput = document.querySelector("#login-form input");
const loginButton = document.querySelector("#login-form button");

function onLoginBtnClick(){
    const inval = loginInput.value;
    if(inval === ""){
        alert("값을 입력하세요");
    }
    else{
        console.log("hello",inval);
    }
}

loginButton.addEventListener("click", onLoginBtnClick)

 

 

이런식으로 응용이 가능하다. 

(해당 if, else 소스는 제가 직접 적어봤습니다. 다음 강의 때 해당 부분에 대한 내용이 나오니 다음 포스팅에 작성하도록 하겠습니다.)

반응형

댓글