-
Notifications
You must be signed in to change notification settings - Fork 21
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
[나승엽] sprint4 #64
The head ref may contain hidden characters: "Basic-\uB098\uC2B9\uC5FD-Sprint1"
[나승엽] sprint4 #64
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,105 @@ | ||||||||||||||||||||||||||||||||||
document.addEventListener("DOMContentLoaded", function () { | ||||||||||||||||||||||||||||||||||
const emailInput = document.getElementById("email"); | ||||||||||||||||||||||||||||||||||
const passwordInput = document.getElementById("password"); | ||||||||||||||||||||||||||||||||||
const verifypasswordInput = document.getElementById("verifypassword"); | ||||||||||||||||||||||||||||||||||
const loginButton = document.getElementById("login_box"); | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
const emailError = document.getElementById("error_email"); | ||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2:
Suggested change
|
||||||||||||||||||||||||||||||||||
const passwordError = document.getElementById("error_password"); | ||||||||||||||||||||||||||||||||||
const verifypasswordError = document.getElementById("error_verifypassword"); | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
// 이메일검증 이벤트 | ||||||||||||||||||||||||||||||||||
if (emailInput) { | ||||||||||||||||||||||||||||||||||
emailInput.addEventListener("focusout", function () { | ||||||||||||||||||||||||||||||||||
const emilStatus = emailInput.value.trim(); | ||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2:
Suggested change
|
||||||||||||||||||||||||||||||||||
if (emilStatus === "") { | ||||||||||||||||||||||||||||||||||
showError(emailInput, emailError, "이메일을 입력해주세요."); | ||||||||||||||||||||||||||||||||||
} else if (!emailValidate(emilStatus)) { | ||||||||||||||||||||||||||||||||||
showError(emailInput, emailError, "잘못된 이메일 형식입니다."); | ||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||
hideError(emailInput, emailError); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
transLoginButton(); | ||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
// 비밀번호 검증 이벤트 | ||||||||||||||||||||||||||||||||||
if (passwordInput) { | ||||||||||||||||||||||||||||||||||
passwordInput.addEventListener("focusout", function () { | ||||||||||||||||||||||||||||||||||
const passwordStatus = passwordInput.value.trim(); | ||||||||||||||||||||||||||||||||||
if (passwordStatus === "") { | ||||||||||||||||||||||||||||||||||
showError(passwordInput, passwordError, "비밀번호를 입력해주세요."); | ||||||||||||||||||||||||||||||||||
} else if (passwordStatus.length < 8) { | ||||||||||||||||||||||||||||||||||
showError( | ||||||||||||||||||||||||||||||||||
passwordInput, | ||||||||||||||||||||||||||||||||||
passwordError, | ||||||||||||||||||||||||||||||||||
"비밀번호를 8자리 이상으로 입력해주세요." | ||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||
hideError(passwordInput, passwordError); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
transLoginButton(); | ||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
// 비밀번호 확인 검증 이벤트 | ||||||||||||||||||||||||||||||||||
if (verifypasswordInput) { | ||||||||||||||||||||||||||||||||||
verifypasswordInput.addEventListener("focusout", function () { | ||||||||||||||||||||||||||||||||||
const verifypasswordStatus = verifypasswordInput.value.trim(); | ||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P1:
Suggested change
|
||||||||||||||||||||||||||||||||||
const passwordStatus = passwordInput.value.trim(); | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
if (verifypasswordStatus.length < 8) { | ||||||||||||||||||||||||||||||||||
showError( | ||||||||||||||||||||||||||||||||||
verifypasswordInput, | ||||||||||||||||||||||||||||||||||
verifypasswordError, | ||||||||||||||||||||||||||||||||||
"비밀번호를 8자리 이상으로 입력해주세요." | ||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2: |
||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||
} else if (verifypasswordStatus !== passwordStatus) { | ||||||||||||||||||||||||||||||||||
showError( | ||||||||||||||||||||||||||||||||||
verifypasswordInput, | ||||||||||||||||||||||||||||||||||
verifypasswordError, | ||||||||||||||||||||||||||||||||||
"비밀번호가 일치하지 않습니다." | ||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||
hideError(verifypasswordInput, verifypasswordError); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
transLoginButton(); | ||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
// 로그인버튼 활성/비활성 | ||||||||||||||||||||||||||||||||||
function transLoginButton() { | ||||||||||||||||||||||||||||||||||
const emilStatus = emailInput.value.trim(); | ||||||||||||||||||||||||||||||||||
const passwordStatus = passwordInput.value.trim(); | ||||||||||||||||||||||||||||||||||
const verifypasswordStatus = verifypasswordInput.value.trim(); | ||||||||||||||||||||||||||||||||||
if ( | ||||||||||||||||||||||||||||||||||
emilStatus !== "" && | ||||||||||||||||||||||||||||||||||
emailValidate(emilStatus) && | ||||||||||||||||||||||||||||||||||
passwordStatus !== "" && | ||||||||||||||||||||||||||||||||||
passwordStatus.length >= 8 && | ||||||||||||||||||||||||||||||||||
verifypasswordStatus === passwordStatus | ||||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||
loginButton.classList.remove("disabled"); | ||||||||||||||||||||||||||||||||||
Comment on lines
+72
to
+79
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P3:
Suggested change
|
||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||
loginButton.classList.add("disabled"); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
// 이메일 형식 검증 | ||||||||||||||||||||||||||||||||||
function emailValidate(email) { | ||||||||||||||||||||||||||||||||||
const re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; | ||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2:
Suggested change
|
||||||||||||||||||||||||||||||||||
return re.test(email); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
// 에러 표시 | ||||||||||||||||||||||||||||||||||
function showError(input, errorElement, message) { | ||||||||||||||||||||||||||||||||||
input.classList.add("input-error"); | ||||||||||||||||||||||||||||||||||
errorElement.textContent = message; | ||||||||||||||||||||||||||||||||||
errorElement.style.visibility = "visible"; | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
// 에러 숨김 | ||||||||||||||||||||||||||||||||||
function hideError(input, errorElement) { | ||||||||||||||||||||||||||||||||||
input.classList.remove("input-error"); | ||||||||||||||||||||||||||||||||||
errorElement.style.visibility = "hidden"; | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
document.getElementById("login_box").addEventListener("click", function () { | ||||||||||||||||||||||||||||||||||
if (!loginButton.classList.contains("disabled")) | ||||||||||||||||||||||||||||||||||
window.location.href = "/items"; | ||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
@media (max-width: 767px) { | ||
#content { | ||
width: 100%; | ||
margin: 0 16px; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,33 @@ | ||||||||
/* PC: 1200px 이상 */ | ||||||||
@media (min-width: 1200px) { | ||||||||
} | ||||||||
Comment on lines
+1
to
+3
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2:
Suggested change
|
||||||||
|
||||||||
/* Tablet: 768px 이상 ~ 1199px 이하 */ | ||||||||
@media (min-width: 768px) and (max-width: 1199px) { | ||||||||
#panda { | ||||||||
position: relative; | ||||||||
left: 24px; | ||||||||
} | ||||||||
.login { | ||||||||
position: relative; | ||||||||
right: 24px; | ||||||||
} | ||||||||
footer { | ||||||||
gap: 15px; | ||||||||
} | ||||||||
} | ||||||||
|
||||||||
/* Mobile: 375px 이상 ~ 767px 이하 */ | ||||||||
@media (min-width: 375px) and (max-width: 767px) { | ||||||||
#panda { | ||||||||
position: relative; | ||||||||
left: 16px; | ||||||||
} | ||||||||
.login { | ||||||||
position: relative; | ||||||||
right: 16px; | ||||||||
} | ||||||||
footer { | ||||||||
gap: 10px; | ||||||||
} | ||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2:
HTML 문서 다운로드 후 JS가 다운로드 되게 하단에 배치하신 것 같은데
하단에 배치된 스크립트는 구문분석 순서상 추후에 다운로드 되게 만들어주지만 일반적으로 스크립트 태그가 위치되는 head 요소가 아니므로 가독성 측면에서 단점이 있고 이러한 동작은 스크립트 자체 속성을 통해 이끌어 낼 수 있으므로 script async, defer 속성 사용을 추천드립니다.
https://developer.mozilla.org/ko/docs/Web/HTML/Element/script#defer
https://ko.javascript.info/script-async-defer