진스
jQuery - input 숫자 하나만 입력 후 다음 칸으로 이동하기(모바일 비밀번호 입력 처리하기) 본문
728x90
비밀번호등을 받기 위해 숫자나 특정 단어 하나씩 입력하고 다음칸으로 이동하는 형태의 UI를 많이 접할 수 있습니다.
해당 포스팅에서는 하나의 Input태그마다 입력을 받으면 다음칸으로 이동하고 숫자만 받는 형태를 작성해보겠습니다.
단순하게 maxlength와 number값 타입을 지정하더라도 영문 'e' 또는 한글 자음 모음등이 입력되는 현상😓을 볼 수 있는데, 정규식과 사용할 수 있는 이벤트등을 활용하여 처리하였습니다.😋
좀 더 좋은 깔끔한 방식이 있다면 댓글 부탁드립니다!🙆♀️
<input type="tel" maxlength="1" min="0" max="9" onlyNumber>
$(function(){
$(document).on("keypress keyup keydown", "input[onlyNumber]", function(e){
console.log(e.which);
if(/[a-z|ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/g.test(this.value)){ //한글 막기
e.preventDefault();
this.value = "";
}else if (e.which != 8 && e.which != 0 //영문 e막기
&& e.which < 48 || e.which > 57 //숫자키만 받기
&& e.which < 96 || e.which > 105){ //텐키 받기
e.preventDefault();
this.value = "";
}else if (this.value.length >= this.maxLength){ //1자리 이상 입력되면 다음 input으로 이동시키기
this.value = this.value.slice(0, this.maxLength);
if($(this).next("input").length > 0){
$(this).next().focus();
}else{
$(this).blur();
}
}
});
});
태그 input에 type을 tel로 한 이유는 모바일 환경에서 넘버패드로 먼저 동작하도록 하기 위해 처리하였고, input태그 내부에 onlyNumber라는 속성이 있으면 동일하게 동작하도록 처리하였습니다.
마지막 else if문에서 길이를 체크하고 maxlength값만큼 커지거나 같아지면 다음 input이 있는지 체크 후 자동으로 포커싱하는 스크립트입니다.
동작테스트는 아래 codePen⌨을 활용해주세요!
https://codepen.io/myhappyman/pen/MWpNVvK
728x90
'Html' 카테고리의 다른 글
레진 WAI-ARIA 가이드라인 (0) | 2022.02.01 |
---|---|
버튼에 타입을 쓰는 이유 (button type="button") (0) | 2021.10.19 |
접근성을 위한 role (0) | 2021.08.25 |
접근성 관련 크롬 확장 설치 (0) | 2021.08.13 |
시멘틱한 마크업을 위한 html 태그 (0) | 2021.04.26 |
Comments