텍스트 상자에 특정 문자를 허용하기 위해 jQuery를 사용하여 keydown 이벤트에 바인딩합니다. 내 코드 크로스 브라우저 및 플랫폼을 준수하도록 노력하고있어. 내 주요 문제는 유효한 키 코드, 특히 숫자 코드에서 오는 키 코드 (소수 구분 기호, 코마 또는 마침표 등)에 대해 수신 된 키 코드를 매핑하는 방법을 찾을 수 없다는 것입니다. 도움에 미리자바 키 코드 =/char 코드
감사합니다, 파비안 올바른
텍스트 상자에 특정 문자를 허용하기 위해 jQuery를 사용하여 keydown 이벤트에 바인딩합니다. 내 코드 크로스 브라우저 및 플랫폼을 준수하도록 노력하고있어. 내 주요 문제는 유효한 키 코드, 특히 숫자 코드에서 오는 키 코드 (소수 구분 기호, 코마 또는 마침표 등)에 대해 수신 된 키 코드를 매핑하는 방법을 찾을 수 없다는 것입니다. 도움에 미리자바 키 코드 =/char 코드
감사합니다, 파비안 올바른
글쎄, 내가 말한 것처럼,이 질문의 목적은 숫자 값에 텍스트 상자를 필터링하는 것이 었습니다. keypress 이벤트를 사용하여 목표에 도달했습니다.
솔루션에 관심이있는 사용자에게 jQuery plug-in을 게시했습니다.
. 당신이 할 수있는 매핑이 없습니다. keydown
은 삽입되는 문자와 일치하지 않을 수도 있습니다. 또는 Caps Lock은 키 누르기의 의미를 변경시킬 수 있으며이를 무시할 수 없습니다. 및 various other wrinkles.
문자 코드를 알고 싶다면 keypress
이벤트를 사용하는 것이 유일한 옵션입니다.
글쎄, 문제가 키 코드를 문자로 변환했다면, 브라우저가 그것을 처리하도록하지 않겠습니까? 이것은 끔찍한 소리 일지 모르지만 브라우저가 텍스트 상자를 수정하도록 허용 할 수 있습니다 (삭제가 삭제이고 기간이 마침표가되도록). 그런 다음 되돌아 가서 편집하십시오. 음 ... 아마도 다음과 같습니다. :
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".
나는 이것이 당신의 질문에 실제로 대답하지 않는다는 것을 알고 있지만, 문제를 완전히 회피합니다!
흥미롭지 만 말씀 드렸듯이, 문자는 먼저 텍스트 상자에 표시됩니다. 이것은 내가 갖고 싶지 않은 것이다. –
이것은 또한 내 결론입니다. 그러나 http://www.quirksmode.org/js/keys.html에 따르면 Firefox가 키 누르기 이벤트를 올바르게 처리하지 못하는 것으로 보입니다. 나는이 문제에 조금 붙어있다 : -/ –
keypress에 대한 또 하나의 점은, 마침표와 삭제 키 (backspace가 아닌)에 대해 동일한 코드를 얻는다 : 46. 이것은 나를위한 커다란 문제이다 :( 영어 Windows XP, 영어 파이어 폭스, 벨기에 키보드, 벨기에 매핑 –
Firefox의 키 누르기가 정상입니다. 일반적인 'event.which'를 사용하여 문자를 가져온 다음 IE의 charCode-in-keyCode 동작에 fallback을 추가하십시오. = 'which'in event? event.which : event.keyCode;' – bobince