달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

input 태그에 숫자만을 입력할 수 있도록 하려면1 자바 스크립트의 도움이 필요합니다. 구현이 쉬워 보이지만 다양한 웹 브라우저를 고려하다보면 생각보다 까다롭습니다.

1onkeydown 이벤트 핸들러

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();
}
110은 숫자 패드에 있는 점(.)의 키 코드입니다.

단축키 입력 허용

값을 입력할 때 다양한 단축키를 사용할 수 있습니다.

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();
}

주요 특수 키 코드는 다음과 같습니다.

표 1주요 키 코드

코드

TAB

9

HOME

36

END

35

LEFT

37

RIGHT

39

BACKSPACE

8

DELETE

46

 


 

출처 :   https://www.3rabbitz.com/blog_ko/a6068a3f953de9d8/10

Posted by 타카스 류지
|