input
태그에 숫자만을 입력할 수 있도록 하려면1 자바 스크립트의 도움이 필요합니다. 구현이 쉬워 보이지만
다양한 웹 브라우저를 고려하다보면 생각보다 까다롭습니다.
1onkeydown
이벤트 핸들러
onkeydown
이벤트 핸들러input
태그에 onkeydown
속성을 추가합니다.
<input type="text" onkeydown="filterNumber(event);">
filterNumber
함수는 다음과 같습니다.
function filterNumber(event) {
event.preventDefault(); 1
}
1이 어떤 값도 입력할 수 없도록 합니다.
onkeypress
또는 onkeyup
이벤트 핸들러는 사용할 수 없습니다.
onkeypress
이벤트 핸들러를 사용할 수 없는 이유-
onkeypress
이벤트 핸들러를 사용하면 한글을 입력할 수 있습니다. 한글 입력에 대해서는onkeypress
이벤트 자체가 발생하지 않습니다. onkeyup
이벤트 핸들러를 사용할 수 없는 이유-
onkeyup
이벤트는 글자가 입력된 후에 발생하기 때문에onkeyup
이벤트 핸들러를 사용하면 모든 글자를 입력할 수 있습니다.
그런데 파이어폭스에서는 한글이 입력되는 문제가 있습니다. 이를
해결하려면 input
태그에 ime-mode
스타일을 추가합니다.
<input type="text" style="ime-mode: disabled;" onkeydown="filterNumber(event);">
2입력이 가능한 키 코드 설정하기
현재까지는 어떤 값도 입력할 수 없습니다. 지금부터는 다음
예외 규정을 filterNumber
함수에 반영하겠습니다.
-
숫자
-
점
-
단축키
-
특수 키
숫자 입력 허용
먼저 숫자 입력을 허용합니다. event
객체의 1keyCode
속성으로 사용자가 입력한 키 코드를 알 수 있습니다.
function filterNumber(event) { var code = event.keyCode; 1 if (code > 47 && code < 58) { return; } event.preventDefault(); 2 }
숫자 0의 키 코드는 48이고, 숫자 9의 키 코드는 57입니다. 따라서 키 코드가 47보다 크고 58보다 작으면 숫자를 입력한 것이기 때문에 2가 호출되지 않도록 반환합니다.
점 입력 허용
정수가 아닌 소숫점도 입력할 수 있도록 점(.)의 입력을 허용합니다.
function filterNumber(event) { var code = event.keyCode; if (code > 47 && code < 58) { return; } if (code === 110 || code === 190) { return; } event.preventDefault(); }
단축키 입력 허용
값을 입력할 때 다양한 단축키를 사용할 수 있습니다.
Ctrl + A
-
입력한 값을 선택
Ctrl + Z
-
실행 취소
Ctrl + Y
-
다시 실행
이런 단축키를 지원하기 위해 Ctrl
또는 Alt
키가 눌러진 상태라면 입력을 허용합니다.
function filterNumber(event) { var code = event.keyCode; if (code > 47 && code < 58) { return; } if (code === 110 || code === 190) { return; } if (event.ctrlKey || event.altKey) { return; } event.preventDefault(); }
특수 키 입력 허용
마지막으로 왼쪽(←) 또는 오른쪽(→) 방향키와 같은 특수 키 입력을 허용합니다.
function filterNumber(event) { var code = event.keyCode; if (code > 47 && code < 58) { return; } if (code === 110 || code === 190) { return; } if (event.ctrlKey || event.altKey) { return; } if (code === 9 || code === 36 || code === 35 || code === 37 || code === 39 || code === 8 || code === 46) { return; } event.preventDefault(); }
주요 특수 키 코드는 다음과 같습니다.
키 |
코드 |
---|---|
|
9 |
|
36 |
|
35 |
|
37 |
|
39 |
|
8 |
|
46 |
'Dev Language > JAVASCRIPT' 카테고리의 다른 글
정규식(혹은 정규표현식)에 대한 문서들 정리 (0) | 2016.03.25 |
---|---|
정규표현식(Regular Expression)을 소개합니다 (0) | 2016.03.25 |
엘리먼트 x,y 위치값 가져오기 (0) | 2016.02.15 |
JAVASCRIPT OFFSET(TOP,LEFT) (0) | 2015.09.18 |
JAVASCRIPT 한글 유니코드 변경 (0) | 2015.07.31 |