본문 바로가기

프론트엔드/javascript

javascript (8) - Login 만들기 #3

* 로그아웃 버튼 만들기

버튼 누르면 묻지도 따지지 않고 바로 로그아웃

 

<!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>login</title>
</head>

<body>
    <form id="login-form" class="hidden">
        <input 
         required
         maxlength="15"
         type="text"
         placeholder="What is your name?"
         />
        <button>Log-in</button>
    </form>
    <form id="greeting" class="hidden">
        <h1></h1>
        <button>Log-out</button>
    </form>
        <script src="app.js"></script>
</body>

</html>

환영문구에 로그아웃버튼 추가 - form으로 버튼 클릭시 submit 후 자동 새로고침

 

const loginform = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const greeting = document.querySelector("#greeting");
const greetingH1 = document.querySelector("#greeting h1");

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

function loginOn(event) {
    event.preventDefault();
    const username = loginInput.value;
    localStorage.setItem(USERNAME_KEY, username);
    loginfor m.classList.add(HIDDEN_CLASSNAME); 
    paintGreeting(username);
}


function paintGreeting(username) {
    greetingH1.innerText = `hello ${username}`
    greeting.classList.remove(HIDDEN_CLASSNAME);
}

function logoutOn() {
    localStorage.removeItem(USERNAME_KEY);

}


const savedUsername = localStorage.getItem(USERNAME_KEY);


if(savedUsername === null) {
    loginfor m.classList.remove(HIDDEN_CLASSNAME); 
    loginform.addEventListener("submit", loginOn);
} else {
    paintGreeting(savedUsername);

}

greeting.addEventListener("submit",logoutOn);




HTML에서 id, class 값 위치 변경으로 queryselector 수정

logoutOn 함수 추가 - storage에서 username value 삭제

if문 종료 후 로그아웃 버튼 누를 시 login-form으로 이동

버그 : 처음에는 greeting.addEventListener("submit",logoutOn);

else문에 넣었더니 2번 눌러야 로그아웃이 됨.

해결 : else 문 밖에 입력

 

 

반응형