Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[박나겸] Spritn4 #179

Merged

Conversation

nagyum
Copy link
Collaborator

@nagyum nagyum commented Nov 17, 2024

요구사항

기본

로그인

  • 이메일 input에서 focus out 할 때, 값이 없을 경우 input에 빨강색 테두리와 아래에 “이메일을 입력해주세요.” 빨강색 에러 메세지를 보입니다.
  • 이메일 input에서 focus out 할 때, 이메일 형식에 맞지 않는 경우 input에 빨강색 테두리와 아래에 “잘못된 이메일 형식입니다” 빨강색 에러 메세지를 보입니다.
  • 비밀번호 input에서 focus out 할 때, 값이 없을 경우 아래에 “비밀번호를 입력해주세요.” 에러 메세지를 보입니다
  • 비밀번호 input에서 focus out 할 때, 값이 8자 미만일 경우 아래에 “비밀번호를 8자 이상 입력해주세요.” 에러 메세지를 보입니다.
  • input 에 빈 값이 있거나 에러 메세지가 있으면 ‘로그인’ 버튼은 비활성화 됩니다.
  • input 에 유효한 값을 입력하면 ‘로그인' 버튼이 활성화 됩니다.
  • 활성화된 ‘로그인’ 버튼을 누르면 “/items” 로 이동합니다

회원가입

  • 이메일 input에서 focus out 할 때, 값이 없을 경우 input에 빨강색 테두리와 아래에 “이메일을 입력해주세요.” 빨강색 에러 메세지를 보입니다.
  • 이메일 input에서 focus out 할 때, 이메일 형식에 맞지 않는 경우 input에 빨강색 테두리와 아래에 “잘못된 이메일 형식입니다” 빨강색 에러 메세지를 보입니다.
  • 닉네임 input에서 focus out 할 때, 값이 없을 경우 input에 빨강색 테두리와 아래에 “닉네임을 입력해주세요.” 빨강색 에러 메세지를 보입니다.
  • 비밀번호 input에서 focus out 할 때, 값이 없을 경우 아래에 “비밀번호를 입력해주세요.” 에러 메세지를 보입니다
  • 비밀번호 input에서 focus out 할 때, 값이 8자 미만일 경우 아래에 “비밀번호를 8자 이상 입력해주세요.” 에러 메세지를 보입니다.
  • 비밀번호 input과 비밀번호 확인 input의 값이 다른 경우, 비밀번호 확인 input 아래에 “비밀번호가 일치하지 않습니다..” 에러 메세지를 보입니다.
  • input 에 빈 값이 있거나 에러 메세지가 있으면 ‘회원가입’ 버튼은 비활성화 됩니다.
  • input 에 유효한 값을 입력하면 ‘회원가입' 버튼이 활성화 됩니다.
  • 활성화된 ‘회원가입’ 버튼을 누르면 “/signup” 로 이동합니다

심화

  • 눈 모양 아이콘 클릭시 비밀번호의 문자열이 보이기도 하고, 가려지기도 합니다.
  • 비밀번호의 문자열이 가려질 때는 눈 모양 아이콘에는 사선이 그어져있고, 비밀번호의 문자열이 보일 때는 사선이 없는 눈 모양 아이콘이 보이도록 합니다.

주요 변경사항

  • 자바스크립트로 event 생성

스크린샷

image

멘토에게

  • span 태그를 가장 밑 input 값에 안 넣으면 에러메세지가 안보여요,,
  • 같은 코드가 반복 되는데 이것 또한 모듈화로 가능할까요?
스크린샷 2024-11-17 오후 7 23 08
  • id 값은 같은게 두개가 있으면 안되니 eyeClicked 할 때 password의 값을 class 로 변경 해줘도 회원가입 창에서는 비밀번호 확인 창의 비번은 안보이는데 'data-target 속성을 참조하여 해당 비밀번호 필드(input)의 타입을 변경' 이런 식으로 data-target을 넣는게 맞나요..?

  • 저는 function을 다 줬는데 addEventListener로 js 를 짜는게 더 나을까요?

  • 셀프 코드 리뷰를 통해 질문 이어가겠습니다.

@nagyum nagyum requested a review from Lanace November 17, 2024 10:25
@nagyum nagyum added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label Nov 17, 2024
@@ -20,20 +19,25 @@
<form class="auth_contents">
<div class="auth_content">
<label>이메일</label>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

                <label for="email">이메일</label>

이렇게 바꾸면 로그인을 클릭하더라도 email input에 포커스가 갈꺼에요ㅎㅎ!

<div class="auth_content pw">
<label>비밀번호</label>
<div class="auth_content">
<label for="password">비밀번호</label>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아아 알고계신데 위에 이메일은 누락되신거군요ㅎㅎ

이미 알고계시다면 그냥 넘어가도 괜찮아요~!!

Comment on lines +34 to +35
<div class="eye" onclick="onEyecliked()">
<img id="eye_img" onclick="onImgcliked()" src="/images/btn_visibility_on_24px.svg">
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

클릭했을때 onImgcliked 도 있고 onEyecliked 가 있는데 어떤게 맞는걸까요?

Comment on lines -35 to +37
<input class="button" type="submit" value="로그인">
<input class="button" type="button" value="로그인" onclick="location.href='/pages/items.html';">
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아직 form을 안배워서 submit 버튼이 되면 action이 발생되어서 원하는대로 동작이 안되시긴 할꺼에요...!

원래대로 submit이 맞고, form 태그로 감싸주는게 원래는맞아요ㅎㅎ;;

일단 이부분은 배우기 전이니 넘어가도 괜찮습니다!

Comment on lines +44 to 46
<div class="eye" onclick="onEyecliked()">
<img src="/images/btn_visibility_on_24px.svg">
</div>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아래쪽꺼 눈 아이콘을 클릭해도 위에있는 비밀번호 input의 type이 바뀌는것같아요ㅠ

image

이 버그를 해겨결하기 위해선 비밀번호 확인에도 별도의 함수를 만들어주어야 겠네요...!ㅠ

근데 그렇게 하자니 너무 코드가 길어지고 중복되는 코드가 많아져서 보기 싫으실 수 있어요...ㅠㅠㅠ
저희가 그래서 part1에서 중복되는 코드를 줄이고자 모듈화 했던거 기억 나실꺼에요!

js도 모듈화를 할 수 있는데, 그건 멘토링때 같이 해보구요, 일단 회원가입 페이지에서 비밀번호확인쪽도 정상적으로 동작하도록 수정해보면 좋을것같아요!

제일 쉽게는 그냥 passwordConfirm을 위한 함수를 따로 만들어주면 되겠죠ㅎㅎ!

const submitBtn=document.querySelector('.button');
const email=emailInput.value;

if(email.includes("@")&&email.includes(".")){
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이부분을 조금 개선하면 좋을것같아요!

일단 이메일인지 아닌지 구분하기 위해서 @. 이 포함되긴 해야겠지만 다른 조건들도 여러가지가 있을꺼에요...ㅠ

그걸 하나하나 if문으로 거르는건 어렵고, 이런 문제를 해결하기 위해서 실무에서 정규표현식 이라는걸 많이 사용해요!

문자열의 패턴을 검사하는건데, 다음과 같이 사용해요

function isValidEmail(email) {
  // 이메일 정규표현식
  const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
  return emailRegex.test(email);
}

// 테스트
console.log(isValidEmail("[email protected]")); // true
console.log(isValidEmail("invalid-email"));      // false
console.log(isValidEmail("[email protected]"));  // true
console.log(isValidEmail("[email protected]"));          // false

형태는 조금 어려울 수있는데, 우선 이런게 있다 정도만 알고 넘어가도 좋아요ㅎㅎ

Comment on lines +44 to +63
if(!password){
pwError.innerText='비밀번호를 입력해주세요'
pwInput.classList.add('error');
pwError.classList.add('error_msg');
submitBtn.disabled=true;
}
else if(password.length<=8){
pwError.innerText='비밀번호를 8자 이상 입력해주세요';
pwInput.classList.add('error');
pwError.classList.add('error_msg');
submitBtn.disabled=true;
}
else{
pwInput.classList.remove('error');
pwError.innerText = ''; // 에러 메시지 제거
pwError.classList.remove('error_msg');
submitBtn.disabled = false;
submitBtn.style.backgroundColor = 'var(--blue100)'; // 원

}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

꼼꼼하게 예외처리 잘 처리하신것같아요ㅎㅎ!
코드도 깔끔해서 읽기도 편하구요

@Lanace
Copy link
Collaborator

Lanace commented Nov 18, 2024

질문에 대한 답

  1. span 태그를 가장 밑 input 값에 안 넣으면 에러메세지가 안보여요,,

이건 이해를 잘 못했어요ㅠ
span이 없어도 정상적으로 에러 메시지는 . 잘보이는것같은데 맞을까여??

  1. 같은 코드가 반복 되는데 이것 또한 모듈화로 가능할까요?

네네! 물론이죠ㅎㅎ!
근데 이부분은 다들 어려워하시는것같아서 멘토링떄 같이 구현해볼 생각이에요...!

힌트를 드리자면... 구현하는 함수들을 다시사용할 수 있도록 추상화 하는거에요!
함수 안에서 input이나 message에 직접 접근하는게 아니라 params로 받아오는거에요ㅎㅎ

  1. id 값은 같은게 두개가 있으면 안되니 eyeClicked 할 때 password의 값을 class 로 변경 해줘도 회원가입 창에서는 비밀번호 확인 창의 비번은 안보이는데 'data-target 속성을 참조하여 해당 비밀번호 필드(input)의 타입을 변경' 이런 식으로 data-target을 넣는게 맞나요..?

이건 class로 처리할 수도 있고 data-* 를 사용할수도 있긴 한데, data-* 는 지양하는게 좋아요ㅠ
코드를 하나하나 봐야 이해할 수 있거든요ㅠ
너무 복잡해질 수 있어서...ㅠㅠㅠ

  1. 저는 function을 다 줬는데 addEventListener로 js 를 짜는게 더 나을까요?

이건 방법에 차이라서... 뭐가 맞고 틀리고는 없는데, 저는 addEventListener가 좀더 좋은것같아요ㅎㅎ;;
걸어야하는 이벤트가 많아서요ㅠ

focus도 있고, blur도 있고 input도 있어서... js로 처리하는게 좀더 간단하지 않을까여?

@Lanace Lanace closed this Nov 18, 2024
@Lanace Lanace reopened this Nov 18, 2024
@Lanace
Copy link
Collaborator

Lanace commented Nov 18, 2024

에고...ㅋㅋ;; 실수로 제가 닫아버렸네요ㅋㅋ;;

암튼 과제 하시느라 고생 많으셨구요...!
이제 몬가 고민하시고 계시는게 점점 개발자스러워지고 있으신것같아요ㅋㅋㅋ

잘 진행하고 계신것같습니다!
고생 많으셨어요! 그럼 멘토링떄 뵐게여ㅋㅋ!

더 질문 있으신거 있으시면 코멘트나 DM 남겨주시면 볼게여!

@Lanace Lanace merged commit 1d3952e into codeit-bootcamp-frontend:Basic-박나겸 Nov 18, 2024
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants