로그인 페이지 구현하기 (로그인 버튼 활성화)

zhflsdl보보·2022년 10월 27일
0

JavaScript

목록 보기
3/10

Westagram 에서 로그인페이지를 만들었다.
(이 글은 HTML,CSS를 제외하고 JavaScript 위주의 설명이다.)

Id에 '@' 가 포함되고 Pw가 6자 이상이면, 로그인 버튼이 활성화 되는 기능을 구현해보자.


어떻게 짜면 될까? 코드를 짜기 전에 한글로 생각해보았다.

먼저, 로그인 기능을 구현하기 위해 if문을 사용해야겠다는 생각을 했다.

if (id에 '@' 포함 && pw 길이가 5자보다 길때) {
	로그인 버튼이 활성화된다. (색 변화, cursor 모양 변화)
 }

이런식이 될 것 같고 if문 대신 간단하게 삼항연산자를 쓸 수 있겠고,
eventListener 로 키보드를 눌렀다가 뗄 때 if문이 실행되면 좋겠다. 함수에 if문을 넣어서 event가 실행될때 함수가 호출되면 되겠군..
그리고 키보드를 눌렀다가 뗄 때 실행되는 event 는 keyup 을 사용해야겠다.

if문 조건으로는 Id input의 value 값에 '@' 가 있는지 includes 함수로 확인하고 Pw input value 의 length를 확인하면 되겠다. 그리고 이 두개의 조건을 모두 만족해야되니까 and && 로 연결해줘야지.

이제부터 한번 짜보자!


<1번째 방법>
조건 2가지가 모두 만족할 때 로그인버튼의 배경색과 cursor 모양을 바꾸자.

  // 1번
function checkIdPw () {
    loginId.value.includes("@") && loginPw.value.length > 5
    ? (loginBtn.style.backgroundColor = "#287aff",
    loginBtn.style.cursor = "pointer")
    : loginBtn.style.backgroundColor = "#287aff64;"
}

loginId.addEventListener('keyup', checkIdPw);
loginPw.addEventListener('keyup', checkIdPw);

=> opacity 값을 따로 주지 않고 background-color에 포함시켰다.
=> 삼항연산자에서 한줄이 아닌 여러줄을 쓸 때는 전체를 괄호 () 로 묶고 사이는 , 로 분리하여 표현한다.

🔴 문제점 : 조건을 만족했다가 잘못 입력했을 경우 지워서 조건이 만족되지 않으면 배경색과 커서가 원래대로 돌아가지 않는다.

🔵 해결방법 : buttondisabled 속성을 사용하자.


<2번째 방법>

HTML에서 button 에 속성을 준다.

<button class="loginBtn" disabled>로그인</button>
// 2번
const checkIdPw = () => {
	if(loginId.value.includes("@") && loginPw.value.length > 5){
       	 loginBtn.disabled = false;
       	 loginBtn.style.opacity = 1;
       	 loginBtn.style.cursor = "pointer";
    	} else {
       	 loginBtn.disabled = true;
       	 loginBtn.style.opacity = 0.3;
       	 loginBtn.style.cursor = "default";
    }
}

loginId.addEventListener('keyup', checkIdPw);
loginPw.addEventListener('keyup', checkIdPw);

속성 disabled

버튼을 비활성화함 (사용자가 아무것도 못하게 함, 클릭포함)
JS 로 이를 제어할 수 있다.

disabledboolean 속성이다. 따라서 true or false를 반환한다.

  • disabled = false : 활성화 상태
  • disabled = true : 비활성화 상태

🔴 문제점 : JS에서 Style을 바꾸게 되면 컴퓨터가 읽을 때 느려진다는 단점이 있다.
반복이 많아서 줄이 길어졌다.

🔵 해결방법 : disabled (비활성) 일때의 CSS를 묶어보자.


<3번째 방법>

2번째 방법에서 코드를 짧게 정리해보자.
disabled = false 일때 css 속성이 있고 true 일때 css 속성이 다르므로 따로 빼서 css 에 .loginBtn:disabled 를 추가해준다.

  // 3번
const checkIdPw = () => {    
	loginId.value.includes("@") && loginPw.value.length > 5
    	? loginBtn.disabled = false
    	: loginBtn.disabled = true
}

loginId.addEventListener('keyup', checkIdPw);
loginPw.addEventListener('keyup', checkIdPw);
.loginBtn:disabled{
    opacity: 0.3;
    cursor: default;
}

.loginBtn:disabled {} : 비활성화 상태일 때 CSS
비활성화 상태일 때 로그인 버튼에 opacity = 0.3 , cursor: default 가 추가되는 뜻이다.


완성 이미지

if문 사용해야겠다는 생각은 바로 했지만 그걸 바로 코드로 치기가 어려웠다. 어떤 기능에서 로직을 나눠서 생각하는게 필요할 것 같다. 화이팅..!

완성 코드

<!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">
    <title>Westagram</title>
    <link rel="stylesheet" href="westa.css">
    <link rel="stylesheet" href="reset.css">
    <link href="https://fonts.googleapis.com/css2?family=Lobster&display=swap" rel="stylesheet">
    
</head>
<body>
    <div class="loginPage">
        <header class="loginPageContent">
            <div class="logo">Westagram</div>
    
            <div class="inputBoxes">
                <input class="inputId" type="text" placeholder="전화번호, 사용자 이름 또는 이메일">
                <input class="inputPw" type="password" placeholder="비밀번호">
                <button class="loginBtn" disabled>로그인</button>
            </div>
    
            <div class="findPassword">
                <a href="">비밀번호를 잊으셨나요?</a>
            </div>
        </header>
    </div>
    <script src="westa.js"></script>
</body>
</html>

자바스크립트

const loginId = document.querySelector(".inputId");
const loginPw = document.querySelector(".inputPw");
const loginBtn = document.querySelector(".loginBtn");

const checkIdPw = () => {    
    loginId.value.includes("@") && loginPw.value.length > 5
    ? loginBtn.disabled = false
    : loginBtn.disabled = true
}

loginId.addEventListener('keyup', checkIdPw);
loginPw.addEventListener('keyup', checkIdPw);
profile
매일매일 성장하는 개발자

0개의 댓글