Programming language/Javasript

[Javascript] Event - 기본

pogles 2022. 12. 17. 15:34
<!DOCTYPE html>
<html lang="ko">
<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>Document</title>
</head>
<body>
    <form id="login-form">
    	
        <input required maxlength=5 type="text" placeholder="what is your name?"/>
        
        // required: 반드시 채워야함.
        // maxlength: 입력의 최대길이.
        // placeholder: 입력전 예시문구.
        
        <button>Login</button>
        <a href="www.naver.com>네이버로 이동</a>
    </form>
    <script src="app.js"></script>
</body>
</html>

 

 

 로그인에 필요한 기능 구현 시 주의할 점이 있다. 브라우저는 기본적으로 form 을 submit 하면 새로고침하게 되어있다.

네이버나 카카오톡 등 주요 사이트 들의 로그인 내용을 보면 로그인에 실패해도 id 정보가 남는 것처럼 새로고침 못하도록 구현되어 있다.

 

기본적으로 실행되는 브라우저 기능을 제어하기 위해서 Javascript 에서 event.preventDefault() 를 사용한다.

 

 

const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const link = document.querySelector("a")

function onLoginBtnClick(event) {
    event.preventDefault(); //브라우저의 기본동작 멈춤
    console.log(event);
}

function handleLinkClick(event) {
	event.preventDefault();
    console.dir(event);
}

loginForm.addEventListener("submit",onLoginBtnClick); // submit 해도 새로고침 x
link.addEventListener("click",handleLinkClick); // 링크 눌러도 작동x

 

 

function 부분을 보면 onLoginBtnClick에 매개변수 event 를 부여하고 있다. 매개변수 event 를 넣어주는 이유는 submit event 가 발생할 떄, 이 이벤트의 정보를 담아줄 object 가 필요하기 때문이다. 관행적으로 매개변수의 이름을 event 로 부여한다고 한다.

 

 


 

+ localStorage API

 

 localStorge 를 통해 작은 로컬 DB 를 사용할 수 있다. localStorage 에 key, value 로 저장할 수 있으며, 웹페이지를 새로고침해도 DB는 유지된다. DB 를 초기화 하고싶다면 개발자도구(F12)에 들어가 Application -> Storage -> Local Storage 에서 x 버튼을 누르면 된다.

 

 

localStorage.setItem(key, value) local storage 에 key - value 저장.
localStorage.getItem(key) key 에 대응하는 value 반환.
localStorage.removeItem(key) key 에 대응하는 value 삭제.
localStorage.clear() local storage 데이터 모두 삭제.
<!DOCTYPE html>
<html lang="ko">
<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>Document</title>
</head>
<body>
    <form id="login-form">
        <input required maxlength=5 type="text" placeholder="what is your name?"/>
        <button>Login</button>
    </form>
    <h1 id="greeting"></h1>
    <script src="app.js"></script>
</body>
</html>
.hidden {
	display: none;
}
const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const greeting = document.getElementById("greeting");

const HIDDEN_CLASS="hidden"; // string 변수는 관행적으로 대문자로 이루어진 변수를 사용

function onLoginBtnClick(event) {
    event.preventDefault(); //브라우저의 기본동작 멈춤
    loginForm.classList.add(HIDDEN_CLASS); //로그인 후 form 숨기기
    const userName = loginInput.value;
    localstorage.setItem("username",userName); //mini DB 로그인 정보 저장
    greeting.innerText = `Hello! ${userName}`;
}

loginForm.addEventListener("submit",onLoginBtnClick);