입력창 number 타입의 속성 maxlength 글자수 제한 설정
input 엘리먼트에는 기본적으로 maxlength 속성이 존재하는데, 이는 value 속성의 값을 maxlength 속성 값 이하로 최대 글자 수를 제한하는 기능 이다.
1
| <input type="text" name="inputBox" maxlength="10">
|
그러나 type=”number” 에서는 maxlength 속성 기능이 동작하지 않는다.
1
| <input type="number" name="inputBox" maxlength="10">
|
이유는 type이 number 인 input 엘리먼트는 기본적으로 maxlength 기능을 지원하지 않기 때문이다.
해결방안
oninput 이벤트를 사용하여 별도의 스크립트로 처리
oninput
이벤트는 html5에서 추가된 이벤트로 데이터를 입력받았을 경우 발생된다.
onchange
이벤트 하고는 다르다.
1 2 3 4 5
| function maxLengthCheck(selector) { if (selector.value.length > selector.maxLength) { selector.value = selector.value.slice(0, selector.maxLength); } }
|
1
| <input type="number" pattern="[0-9]*" maxlength="2" oninput="maxLengthCheck(this)">
|
HTML custom data 속성 활용
HTML5일 경우에는 커스텀 data 속성을 활용하여 처리하면 HTML Validator 검사 시 문제가 되지 않는다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function maxlengthNumber(selector, maxNum) { maxNum = (maxNum) ? maxNum : selector.dataset.maxlength; maxNum = parseInt(maxNum, 10); if ('oninput' in document.createElement('input')) { selector.addEventListener('input', function() { if (this.value.length > maxNum) { this.value = this.value.slice(0, maxNum); } }, false); } else { if (maxNum) { selector.setAttribute('maxlength', maxNum); } else { selector.setAttribute('maxlength', selector.dataset.maxlength); } } }
|
1 2 3
| <input type="number" data-maxlength="2" pattern="[0-9]*" id="iptNumber">
<input type="number" pattern="[0-9]*" id="iptNumber">
|
1 2 3
| maxlengthNumber(document.querySelector('#iptNumber'));
maxlengthNumber(document.querySelector('#iptNumber'), 2);
|