n
자릿수 이상이어야 하고, 숫자나 특수문자(@$!%*#?&)
를 반드시 포함해야 한다.example**@**example.com
형식을 갖추어야 한다.000-0000-0000
형식을 갖추어야 한다.코드스테이츠에서 제공된 베이스 파일로 Bare Minimum Test는 완료!
input
항목을 통과하면, 회원가입 버튼을 활성화한다.input
항목을 통과하면, 토끼의 표정을 바꿔준다.input
항목을 통과하면, 토끼는 ↕️
방향으로 고개를 흔든다.↔
방향으로 고개를 흔든다.let inputElements = document.querySelector('#username')
for (let elem of inputElements) {
elem.addEventListener('keyup', evnetHandler);
}
let eventHandlerUsername = () => { ... }
let eventHandlerUserPassword = () => { ... }
let eventHandlerUserPasswordRetype = () => { ... }
let eventHandlerUserEmail = () => { ... }
let eventHandlerUserPhone = () => { ... }
elemUsername.addEventListener('keyup', eventHandlerUsername);
elemUserPassword.addEventListener('keyup', eventHandlerUserPassword);
elemUserPasswordRetype.addEventListener('keyup', eventHandlerUserPasswordRetype);
elemUserEmail.addEventListener('keyup', eventHandlerUserEmail);
elemUserPhone.addEventListener('keyup', eventHandlerUserPhone);
// [Username 유효성 검증]: 최소 4자 이상인지
function isMoreThan4Length(value) { ... }
// [Username 유효성 검증]: 시작은 영문만 가능
function startWithEnglish(str) { ... }
// [Username 유효성 검증 함수]: 영어 또는 숫자만 가능
function onlyNumberAndEnglish(str) { ... }
// [userPassword 유효성 검증]: 최소 8자 이상인지
function isMoreThan8Length(value) { ... }
// [userPassword 유효성 검증]: 알파벳과 숫자 및 특수문자(@$!%*#?&) 는 하나 이상 포함
function strongPassword(str) { ... }
// [userPassword 유효성 검증]: 비밀번호 확인과 같은지
function isMatchPassword (password1, password2) { ... }
// [userEmail 유효성 검증]: example@example.com 이메일 유효성 검사
function onlyEmailFormat(str) { ... }
// [userEmail 유효성 검증]: 000-0000-0000 전화번호 유효성 검사
function onlyPhoneFormat(str) { ... }
// 모든 유효성 검사 항목을 통과했는지 확인
function isValidAllCheck() { ... }
if (true) {
submitButton.classList.add('active')
submitButton.disabled = false
} else {
submitButton.classList.remove('active')
submitButton.disabled = true
}
<input type="text" id="userPhone" placeholder="핸드폰 번호" />
처음에 전화번호 입력시 input
의 type
을 number
로 설정했다가, value
값이 숫자가 들어와 유효성 검사가 진행되지 않았다. 숫자로 보이지만 대시-
를 포함한 string 타입이어야 했다.
button {
pointer-events: none;
}
button.active {
pointer-events: auto;
}
input
을 비활성화 시키기 위해 처음엔 attr disabled 말고 pointer-events
css 값을 적용시켜주었다. 기능적으로는 같은 효과를 주더라도 관심사 분리를 위해 disabled 값으로 대체하는 것이 좋다고 판단하여 수정해 주었다. (멘토에게 질문했을 때는 처음 보셨다고.. ㅎㅎ)
호환 가능한 브라우저는 위와 같다.
pointer-events
none
값의 경우 요소가 포인터 이벤트의 대상이 아님을 가리키는 동시에, 이벤트가 요소를 "뚫고" 들어가 "아래" 요소를 대상으로 하도록 만듭니다. _MDN
MDN에서는 SVG 콘텐츠에 실험적으로 pointer-events를 사용할 수 있다고 한다. fill
, stroke
, painted
, visible
등이다. svg 파일 중 투명한 곳을 클릭하지 못하게 막거나 stroke
만 이벤트를 주고 싶을 때 사용해 볼 수 있을 것 같다.