프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 내일배움단
  • nomadcoder
  • 자바스크립트비트마스크
  • 스파르타코딩클럽
  • 자바스크립트알고리즘
  • JavaScript
  • 투포인터알고리즘
  • MySQL
  • 비트마스크
  • 모던자바스크립트딥다이브
  • 알고리즘
  • 코드스테이츠
  • 국비지원
  • 코딩프로젝트
  • 2023 인프콘 후기
  • 자바스크립트
  • vanilaJS
  • nomadcoders
  • 내일배움카드
  • Til

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

[Day 17] 2022-0715 - 회원가입 페이지 유효성 검사
TIL

[Day 17] 2022-0715 - 회원가입 페이지 유효성 검사

2022. 7. 15. 18:44

오늘 배운 것

  • 회원 가입 페이지 유효성 검사 로직 구현 실습, CSS 작성
  • 이벤트 객체 개요

새롭게 알게된 것

  • 오늘은 어제까지 완성한 유효성 검사에 이어서, 버튼 활성화 기능을 구현했다. 모든 입력값이 정확하게 입력되었을 때만 실행될 수 있도록 모든 유효성 함수의 리턴값을 체크하고 실행할 수 있는 함수를 구현하였다.
// input 값 여부에 따라 버튼 활성화
function checkSignup() {
  let id = elInputUsername.value;
  let email = elInputEmail.value;
  let pw1 = elPassword1.value;
  let pw2 = elPassword2.value;

  if (isMoreThan4Length(id) && isRightFormat(email) && isMoreThan8Length(pw1) && isMatch(pw1, pw2)) {
    elBtnSubmit.disabled = true;
    elBtnSubmit.classList.remove('passive');
  } else {
    elBtnSubmit.disabled = false;
    elBtnSubmit.classList.add('passive');
  }
}
  • 이렇게 만든 checkSignup 함수를, keyup 이벤트가 발생중인 모든 이벤트 핸들러에서 실행하여, 이벤트가 발생될 때마다 값을 체크하고 동작하도록 구현하였다. 
// 예시 : 비밀번호 일치 여부 확인 이벤트 핸들러
const passWordConfirmHandler = () => {
  let pswd1 = elPassword1.value;
  let pswd2 = elPassword2.value;
  if (isMatch(pswd1, pswd2)) {
    elMismatch.classList.add('hide');
  } else {
    elMismatch.classList.remove('hide');
  }
  checkSignup(); //매 이벤트가 실행될 때마다 계속 체크한다.
};

elPassword2.addEventListener('keyup', passWordConfirmHandler);
  • 입력이 될 때마다 실시간으로 유효성을 체크하고 싶었는데, 이런 방법으로 하니까 하나만 값이 달라져도 바로 버튼이 비활성화가 되도록 만들 수 있었다. 
  • 코드를 짤 때마다, 이 방식이 최선인가를 늘 고민하는 편이다. 일단 이보다 더 간단한 방법이 없다고 생각이 들어 구현을 했는데 그래도 이 방식이 괜찮은지 확인해보고 싶어서 라이브세션이 끝난 후 엔지니어님께 질문을 드렸다. 돌아온 답변은 제 3자가 보기에 괜찮고 납득이 간다면 괜찮은 코드이고, 잘 한 것 같다고 말씀해 주셨다. (근데 갑자기 음소거가 되어서 첫 번째 말씀해주신 내용을 못들었다 이런...) 
  • '제 3자가 봤을 때 납득이 가면...' 을 괜찮게 짠 코드인지 판단하는 기준으로 삼아도 좋을 것 같다고 말씀해주셨는데, 나에게도 납득할만한 기준이 생긴 것 같아서 좋다. 교과서처럼 정해진 정답 보다는 계속 새로운 시도를 하고 거기서 더 좋게 발전시키는 것이 개발 정신이라는 생각이 든다. 
  • 또 클린코드의 중요성에 대해서도 다시 생각하게 되었다. 지금까지는 코드를 작성한 뒤에 조금 복습하고 깔끔하게 리팩토링 할 생각을 잘 안했는데, 오늘은 수업이 끝나고 코드를 다시 깔끔하게 고쳤다. 

See the Pen Untitled by hyejj19 (@hyejj19) on CodePen.

 

 

  • input 태그의 disabled 속성 : 이 속성이 있는 요소는 사용할 수 없다. disabled 에 속성을 명시하지 않으면 자동으로 false 값을 가진다. 이 속성을 추가/삭제 하기 위해서 특정 조건에서 element.disabled = true 로 해주었는데, element.removeAttribute 메서드로 disabled 자체를 삭제할 수도 있고, element.setAttribute로 disabled 속성을 추가할 수도 있다.

 

  • addEventListner 와 onclick(on이벤트) 차이점 : addEventListener 가 비교적 최신에 나온 기능이고, 하나의 요소에 여러개의 event리스너를 설정할 수 있기 때문에 onclick보다 권장된다. 

 

  • 브라우저의 렌더링 과정에 따른 <script> 태그의 위치 및 속성 : 브라우저는 html 문서를 해석할 때 위에서 부터 아래로 해석하고, 이 과정에서 (기본적으로) <script> 태그를 만나면 html 다운로드를 멈추고 자바스크립트를 다운로드한다. 이 태그를 head 에 넣든 body 최하단에 넣든 html 받다 말고 자바스크립트를 받으러 가는 것은 동일하다. 
  • 이런 과정의 문제점은 js 가 html보다 더 빨리 받아지면 사용자가 페이지를 볼 수가 없고, 그렇다고 js 를 받기 전에 html을 받으면 js를 사용할 수가 없다. 
  • 따라서 해결책은 head 태그 안에 script에 async 혹은 defer 속성을 넣어서 js 파일을 로드하는 것이다. async 속성은 html을 받다가 script를 만나면 js 도 동시에 다운로드 받는데, 단점은 페이지 렌더링이 끝나기 전에 js가 먼저 실행된다는 것이다. defer는 동시에 다운로드 받는 것은 같은데, html 이 모두 다운로드 되면 js를 실행하는 조금 신사적인 녀석이다. (html을 기다려주는 매너가 있는 것 같다.) 
  • 그래서 가능하면 head 태그에 script 태그를 넣되, defer 속성을 추가하여 로드하자!

SUMMARY

잘한 것

  • 과정 자체에 최선을 다하려고 한 것. 
  • 노력해서 달성할 가능성이 높은 정도로 계획을 수정한 것. 
  • 페어, 다른 동기분들께 알고 있는 것 나누려고 한 점. 
  • 사소한 것이라도 질문하고 답변을 들은 것! 

보완할 것

  • 주말에 늘어지지 말고 공부하기!
  • 운동 빼먹지 말고 가기 

느낀 점

  • 공부한 개념을 바로 실습하면서 사용해보니 훨씬 이해가 잘 되는 것 같고 더 절박하게 (바로 써야하니까) 찾아보게 되는 것 같다. 혼자서 공부를 할 때도 만들면서 배우는 것을 위주로 하는게 효율적일듯.
저작자표시 (새창열림)

'TIL' 카테고리의 다른 글

[Day 19] 2022-0719 : solo 프로젝트 마무리  (0) 2022.07.19
[Day 18] 2022-0718 : solo 프로젝트 -1  (0) 2022.07.18
[Day 16] 2022-0714  (0) 2022.07.14
[Day 15] Koans 과제  (0) 2022.07.13
[Day 14] 클로저, ES6 주요 문법  (0) 2022.07.12
    'TIL' 카테고리의 다른 글
    • [Day 19] 2022-0719 : solo 프로젝트 마무리
    • [Day 18] 2022-0718 : solo 프로젝트 -1
    • [Day 16] 2022-0714
    • [Day 15] Koans 과제
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바