2009-12-11 1 views
6

텍스트 상자에 특정 문자를 허용하기 위해 jQuery를 사용하여 keydown 이벤트에 바인딩합니다. 내 코드 크로스 브라우저 및 플랫폼을 준수하도록 노력하고있어. 내 주요 문제는 유효한 키 코드, 특히 숫자 코드에서 오는 키 코드 (소수 구분 기호, 코마 또는 마침표 등)에 대해 수신 된 키 코드를 매핑하는 방법을 찾을 수 없다는 것입니다. 도움에 미리자바 키 코드 =/char 코드

감사합니다, 파비안 올바른

답변

1

글쎄, 내가 말한 것처럼,이 질문의 목적은 숫자 값에 텍스트 상자를 필터링하는 것이 었습니다. keypress 이벤트를 사용하여 목표에 도달했습니다.

솔루션에 관심이있는 사용자에게 jQuery plug-in을 게시했습니다.

6

. 당신이 할 수있는 매핑이 없습니다. keydown은 삽입되는 문자와 일치하지 않을 수도 있습니다. 또는 Caps Lock은 키 누르기의 의미를 변경시킬 수 있으며이를 무시할 수 없습니다. 및 various other wrinkles.

문자 코드를 알고 싶다면 keypress 이벤트를 사용하는 것이 유일한 옵션입니다.

+0

이것은 또한 내 결론입니다. 그러나 http://www.quirksmode.org/js/keys.html에 따르면 Firefox가 키 누르기 이벤트를 올바르게 처리하지 못하는 것으로 보입니다. 나는이 문제에 조금 붙어있다 : -/ –

+0

keypress에 대한 또 하나의 점은, 마침표와 삭제 키 (backspace가 아닌)에 대해 동일한 코드를 얻는다 : 46. 이것은 나를위한 커다란 문제이다 :( 영어 Windows XP, 영어 파이어 폭스, 벨기에 키보드, 벨기에 매핑 –

+3

Firefox의 키 누르기가 정상입니다. 일반적인 'event.which'를 사용하여 문자를 가져온 다음 IE의 charCode-in-keyCode 동작에 fallback을 추가하십시오. = 'which'in event? event.which : event.keyCode;' – bobince

1

글쎄, 문제가 키 코드를 문자로 변환했다면, 브라우저가 그것을 처리하도록하지 않겠습니까? 이것은 끔찍한 소리 일지 모르지만 브라우저가 텍스트 상자를 수정하도록 허용 할 수 있습니다 (삭제가 삭제이고 기간이 마침표가되도록). 그런 다음 되돌아 가서 편집하십시오. 음 ... 아마도 다음과 같습니다. :

function hookEvents() { 
    $('#myTextBox').oldValue = $('#myTextBox').value; 
    $('#myTextBox').bind('keyup', function(event) { 
     // Maybe nothing's changed? 
     if (event.target.oldValue == event.target.value) { 
      return; 
     } 

     var validInput = /(\-?[0-9]*(?:\.[0-9]*)?)/; 
     var input = event.target.value; 
     var result = validInput.exec(input); 
     if (result.index != 0 || result[result.length-1] != input.length) 
     { 
      event.target.value = result[0]; 
     } 

     // update for later 
     event.target.oldValue = event.target.value; 
    }); 
} 

이 방법의 가장 큰 문제는 누르면 모든 키가 잠시 화면에 표시되는 것입니다. 반면에 REGEX를 사용하면 허용되는 입력 형식을 훨씬 더 효율적으로 제어 할 수 있습니다. 위의 예에서는 양수 또는 음수 (선택적 소수점 포함) 만 허용합니다. 예 : "123", "-123", "-123.456", "123.456".

나는 이것이 당신의 질문에 실제로 대답하지 않는다는 것을 알고 있지만, 문제를 완전히 회피합니다!

+0

흥미롭지 만 말씀 드렸듯이, 문자는 먼저 텍스트 상자에 표시됩니다. 이것은 내가 갖고 싶지 않은 것이다. –