웹 프론트엔드/바닐라 JavaSctipt

바닐라 JS로 크롬 앱 만들기 #4 LOGIN

JYUN(sia) 2024. 1. 13. 04:58

메모장 정리

 <form id = "login-form">
        <input 
        required
        maxlength="15"
        type="text" placeholder="What is your name?" 
        /> //HTML의 도움을 활용하려면 이 input을 form 안에 위치시켜야 함.
        <button>Log In</button>
</form>

input을 form 안에 넣었을 경우 우리가 엔터를 누를 때마다 form은 자동적으로 submit됨.

▷submit의 기본 동작으로서 새로고침 됨

▷event.preventDefault() 사용해서 막아주기

 

#

const loginInput = document.querySelector("#login-form input"); 
//login-form은 id

 

코드

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Mumentum App</title>
</head>
<body>
    <form class = "hidden" id = "login-form">
        <input 
        required
        maxlength="15"
        type="text" 
        placeholder="What is your name?"
        /> 
        <button>Log In</button>
    </form>
    <h1 id = "greeting" class = "hidden"></h1>
    <script src="app.js" ></script>
</body>
</html>

 

.hidden{
    display: none;
}

 

const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input"); //login-form은 id
const greeting = document.querySelector("#greeting");

const HIDDEN_CLASSNAME = "hidden";
const USERNAME_KEY = "username";

function onLoginSubmit(event) {
    event.preventDefault();
    loginForm.classList.add(HIDDEN_CLASSNAME);

    const username = loginInput.value;
    localStorage.setItem("USERNAME_KEY", username);

    paintGreetings(username);
    
}

function paintGreetings(username){
    greeting.innerText = `Hello ${username}`;
    greeting.classList.remove(HIDDEN_CLASSNAME);
}

const savedUsername = localStorage.getItem("USERNAME_KEY");

if (savedUsername === null){
    loginForm.classList.remove(HIDDEN_CLASSNAME);
    loginForm.addEventListener("submit", onLoginSubmit);
}
else{
    paintGreetings(savedUsername);
}