JavaScript

JS | 로그인 활성화 기능 구현 (+ 유효성 로직 추가)

2022. 1. 7. 09:41
목차
  1. DOM요소
  2. 첫번째 방법
  3. 아쉬운점
  4. 두번째 방법
  5. 아쉬웠던 점

Mission.

  • id, password 가 입력되면 로그인 버튼 활성화
  • id, password 가 다시 지워지면 로그인 버튼 비활성화

DOM요소

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

첫번째 방법

inputPw.addEventListener('keydown', () => {
    if(inputId.value && inputPw.value) {
          loginBtn.disabled = false;
        loginBtn.style.backgroundColor = '#4390E7';
    }
});
inputId.addEventListener('keydown', () => {
    if(inputId.value && inputPw.value) {
          loginBtn.disabled = false;
        loginBtn.style.backgroundColor = '#4390E7';
    }
});

inputPw.addEventListener('focusout', () => {
    if(inputId.value == '' || inputPw.value == '') {
          loginBtn.disabled = true;
        loginBtn.style.backgroundColor = '#c4e1fb';
    }
});
inputId.addEventListener('focusout', () => {
    if(inputPw.value == '' || inputId.value == '') {
          loginBtn.disabled = true;
        loginBtn.style.backgroundColor = '#c4e1fb';
    }
});
  1. id가 입력되면 id의 value와 pw의 value가 모두 입력 되었는지 확인하고 두 value가 모두 true 값이면 로그인 버튼이 활성화 되도록 한다. (pw도 동일한 코드 반복)
  2. id에서 포커스 아웃되면 id와 pw의 value값을 확인하고 둘 중 하나라도 value 값이 비어있다면 로그인 버튼이 비활성화 된다. (pw도 동일한 코드 반복)

아쉬운점

동일한 코드가 반복되고 값을 입력했을 때 2가지 letter 이상 입력되어야만 코드가 정상 작동한다.

두번째 방법

// DOM 요소 추가
const loginTable = document.querySelector('.loginTable');

const checkF = () => {
    if(inputId.value && inputPw.value ? 
        loginBtn.disabled = false : loginBtn.disabled = true){
            loginBtn.style.backgroundColor = "#c4e1fb";
        } else {
            loginBtn.style.backgroundColor = "#4390E7";
        }
    }

loginTable.addEventListener('keyup', checkF);
  1. id와 pw의 input을 감싸는 table 요소를 선택한 후 키가 눌릴 때마다 checkF 라는 함수가 실행되도록 한다.
  2. checkF은 talbe요소의 키가 눌릴 때마다 id와 pw의 value 값을 비교하도록 하고 삼항연산자를 사용하여 id와 pw 모두 value가 존재한다면 로그인 버튼이 활성화되고, 2가지 모두 value가 존재하지 않다면 버튼이 비활성화 되도록 한다.

유효성 로직

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

const checkF = (e) => {
    if(inputId.value.includes('@') && inputPw.value.length >= 5 ? 
        loginBtn.disabled = false : loginBtn.disabled = true){
            loginBtn.style.backgroundColor = "#c4e1fb";
        } else {
            loginBtn.style.backgroundColor = "#4390E7";
        }
    }

loginTable.addEventListener('keyup', checkF);

id와 pw의 value가 모두 비어있지 않음과 동시에 id 의 value에 @가 포함되어 있고, pw는 5개의 letter 이상이 입력되어야만 로그인 버튼이 활성화 되도록 조건식에 유효성 체크로직을 추가하였다.

아쉬웠던 점

keyup, keypress, keydown의 차이에 대해 제대로 인지하지 못해 초기 에러를 쉽게 찾아내지 못했다.

'JavaScript' 카테고리의 다른 글

JS | What the heck is a Callback?  (0) 2022.01.19
JS | 댓글 좋아요/삭제 기능  (0) 2022.01.10
JS | 예약어(keyword)와 식별자(Identifiers)  (0) 2022.01.07
JS | async 와 await  (0) 2021.12.29
JS | Promise ( Producer, Consumer)  (0) 2021.12.28
  1. DOM요소
  2. 첫번째 방법
  3. 아쉬운점
  4. 두번째 방법
  5. 아쉬웠던 점
'JavaScript' 카테고리의 다른 글
  • JS | What the heck is a Callback?
  • JS | 댓글 좋아요/삭제 기능
  • JS | 예약어(keyword)와 식별자(Identifiers)
  • JS | async 와 await
3jun
3jun
3jun
3jun
3jun
전체
오늘
어제
  • 분류 전체보기 (94)
    • 프로젝트 (5)
    • Web (9)
    • JavaScript (19)
    • React (12)
    • 알고리즘 (31)
    • Git (3)
    • AWS (3)
    • TypeScript (3)
    • CS (2)
    • Error (6)
    • 회고 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준js
  • outer environment
  • msw
  • 백준 코테
  • msw 에러
  • airbnb style guide
  • 유효성 로직
  • 프로그래머스 코테
  • react
  • state
  • Promise
  • 백준 js
  • 프로그래머스 코딩테스트 js
  • JavaScript
  • 프로그래머스 js
  • 프로그래머스 코딩테스트
  • 자바스크립트
  • this.props.history.push
  • 백준 알고리즘
  • 백준 온라인저지

최근 댓글

최근 글

hELLO · Designed By 정상우.
3jun
JS | 로그인 활성화 기능 구현 (+ 유효성 로직 추가)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.