2010-07-13 4 views
3

사용자가 숫자 키패드에서 도트 키를 눌렀는지 여부를 감지해야합니다. 나는이 초안을 작성했다 :숫자 키패드에서 십진수 (점) 키 감지

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head><title></title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script type="text/javascript"><!-- 
(function($){ 
    var knownCodes = [ 
     [110, 46], // Firefox, IE, Chrome 
     [78, 46] // Opera 
    ]; 
    var pressedCodes = [null, null]; 

    $.fn.comma = function(){ 
     this.live("keydown", function(e){ 
      pressedCodes = [e.which, null]; 

     }).live("keypress", function(e){ 
      pressedCodes[1] = e.which; 

      for(var i=0, len=knownCodes.length; i<len; i++){ 
       if(pressedCodes[0]==knownCodes[i][0] && pressedCodes[1]==knownCodes[i][1]){ 
        $("#log").append("<li>Decimal key detected</li>"); 
        break; 
       } 
      } 
     }); 

     return this; 
    }; 
    $(function(){ 
     $('<ol id="log"></ol>').appendTo("body"); 
    }); 
})(jQuery); 

jQuery(function($){ 
    $(".comma input:text, .comma textarea").css("border", "1px solid black").comma(); 
}); 
//--></script> 
</head> 
<body> 

    <form action="" method="get" class="comma" size="20"> 
     <p><input type="text"></p> 
     <p><textarea rows="3" cols="30"></textarea></p> 
    </form> 

</body> 
</html> 

그러나 스페인어 키보드가있는 Windows XP 상자에서만 테스트 할 수있다. 내 질문 :

  1. e.which에서 읽기가 안전합니까? 적어도 하나의 브라우저에서 e.keyCodee.charCode이 모두 undefined을 반환하기 때문에 사용하고 있습니다.

  2. 운영체제가 이러한 숫자 코드에 어떤 방식으로 영향을 줍니까?

  3. 이러한 코드는 키보드 레이아웃에 따라 다릅니 까?


배경 정보 : I 그래서 난 내 자신을 쓰고 있어요 remap numeric keypad에 jQuery 플러그인을 찾을 수 없습니다.

업데이트

정확한 요구 사항을 설명합니다. 숫자 키패드가있는 스페인어 키보드에는 . 키가 있습니다. 그러나 스페인어의 소수 구분 기호는 ,입니다. 따라서 웹 응용 프로그램에 숫자를 입력하는 것은 짜증나게됩니다. MS Excel과 같은 일부 데스크톱 응용 프로그램은이 키를 다시 매핑하여 쉼표를 삽입합니다. 나는 그것을 모방하려고 노력하고있다.

여기에 게시하는 데 사용한 약간의 스크립트를 적용했습니다. 그건 내가 knownCodes 배열의 값을 가지고 방법은 다음과 같습니다

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head><title></title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script type="text/javascript"><!-- 
(function($){ 
    $.fn.showKeyCodes = function(){ 
     var log = function(e){ 
      $("<li></li>").text(e.type + "(): [keyCode, charCode, which]=[" + e.keyCode + ", " + e.charCode + ", " + e.which + "]").appendTo("#log"); 
     } 

     this.live("keydown", function(e){ 
      log(e); 

     }).live("keypress", function(e){ 
      log(e); 

     }).live("keyup", function(e){ 
      log(e); 

     }); 

     return this; 
    }; 
    $(function(){ 
     $('<ol id="log"></ol>').appendTo("body"); 
    }); 
})(jQuery); 

jQuery(function($){ 
    $(".showKeyCodes input:text, .showKeyCodes textarea").css("border", "1px solid black").showKeyCodes(); 
}); 
//--></script> 
</head> 
<body> 

    <form action="" method="get" class="showKeyCodes" size="20"> 
     <p><input type="text"></p> 
     <p><textarea rows="3" cols="30"></textarea></p> 
    </form> 

</body> 
</html> 

유형 당신의 숫자 키패드에서 . 키 (또는 키는 무엇이든 당신의 키보드 레이아웃에 대체)와 알파벳 키패드에 같은 문자에 해당하는 키 . 목표는 첫 번째 클릭을 감지하고 두 번째 클릭을 감지하는 것입니다.

+1

사이드 노트 : 내 키보드가없는 한, 당신은 일을이 키를 필요로하지 않는 희망 숫자 키패드 : http://www.apple.com/keyboard/ –

+0

스페인어로 올바른 소수점 구분 기호 인 코마를 삽입하고 싶습니다. 키패드가 없다면 문제를 해결할 필요가 없습니다. –

답변

1

코드가 내 끝에서 아무 것도하지 않으므로 아마 키보드 레이아웃에 의존한다고 말할 수 있습니다. 빠른 점검을 통해 Finnish Qwerty 키보드의 출력이 예상 46 대신 키 코드 44임을 확인합니다.

+0

흠 .. [keyCode, charCode, which] = [0, 44, 44]' 규칙적인 코마 키. Finish 키패드에 코마 키가 있습니까? –

+0

키다운 : 숫자가 110,0,110, 일반 쉼표가 188, 0, 188입니다. keypress에서 : numpad와 normal comma 모두 44,44,44 –

2

e.which에서 읽는 것이 안전합니까? (keypress에 실제로 문자 코드가 아닌 키 코드 비록)

일반적으로 IE에서 아니, 당신은 단지 keyCode를 얻을. 배후에서 jQuery가 keyCode 값을 IE의 which에 복사하기 때문에 코드에 which을 읽을 수 있습니다. jQuery가 없으면 어떤 코드를 선택해야 하는지를 알기 위해 속성 스니핑 코드가 필요합니다. (가 제공 될 보장하고 파이어 폭스에 0 아니에요 있기 때문에 항상 keypresskeyCode을 읽을 수 없습니다.)

내가 문자를 감지하지 않으려 참고 : I가 키를 감지합니다.

keypress에는 문자 코드 (46, ASCII는 .) 만 제공됩니다.대신 keydown을 트랩해야하며 실제 키 코드 (keyCode 속성 및 IE가 아닌 브라우저의 경우 which)에 액세스 할 수 있습니다.

숫자 키패드 ./, 단추에 대해보고 된 은 110 (소문자 N의 경우 ASCII)입니다. 78 인 오페라를 제외하고 대문자 N의 경우 ASCII이므로 N 버튼을 누르지 않아도 구별 할 수 없습니다.

따라서 키 110 또는 78이 눌러 졌을 때 keydown 이벤트를 신고하고 플래그를 저장할 수 있다면 keypress이라고 주장 할 수 있습니다. 마지막으로 keydown의 플래그가 설정되고 which (charCode) 속성이 46 인 경우 키 누르기를 방지하기 위해 return false을 누른 다음 ,을 초점 지점에 삽입하십시오. (한 번에 여러 개의 키가 눌려져 있고 자동 반복이 계속되는 경우 이것은 매우 신뢰할 만하지 않습니다.)

초점에 문자를 삽입하는 것은 그다지 중요하지 않습니다. 이전의 많은 질문을 여기에서보십시오. IE (document.selection.createRange().text=...) 및 다른 최신 브라우저 (selectionStart/selectionEnd을 기반으로 입력의 value 변경)에 분기 코드가 필요합니다. 구형 및 모바일 또는 틈새 브라우저는 두 가지 편집 방법을 지원하지 않을 수 있으므로 이러한 속성이 부족하다는 것을 감지하고 수행 할 수없는 경우 키보드를 혼자 두십시오.

운영체제가 이러한 숫자 코드에 어떤 방식으로 영향을 줍니까? 이 코드는 키보드 레이아웃에 따라 다릅니 까?

일반적으로 네가 여기에 영향을 미치지는 않지만. 주요 이벤트는 일반적으로 여전히 매우 다양한 크로스 브라우저, 크로스 키보드 및 크로스 플랫폼에 있습니다. 가능한 한 피하는 것이 가장 좋습니다.

개인적으로 스페인어의 숫자가있는 소수점과 같은 나쁜 키보드 레이아웃 선택에 대한 적절한 해결책은 MSKLC을 사용하여 레이아웃을 수정하는 것입니다.

0

이 질문을 한 후, 나는 마침내 정확히 수행하는 jQuery 플러그인을 발견 어떤 시간 : numpad-decimal-separator