2013-10-22 9 views
1

가격 필드가 있고 숫자 만 허용하고 싶습니다. (입력 [숫자] 등의 기본 html5 입력이 마음에 들지 않습니다. 이 :Firefox가 화살표 키와 % 및 '% 012'사이의 차이점을 이해하는 방법

<input type="text" name="price" placeholder="" onkeypress="validate(event)"> 

function validate(evt) { 
    var theEvent = evt || window.event; 
    var key = theEvent.keyCode || theEvent.which; 
    key = String.fromCharCode(key); 
    var code = theEvent.keyCode || theEvent.which; 
    var regex = /[0-9]/; 
     if(!regex.test(key) && code != 8/*backspace*/ && code != 37/*left*/ && code != 39/*right*/ && code != 13/*enter*/ && code != 46/*delet*/ && code != 9/*tab*/){ 
     theEvent.returnValue = false; 
     if(theEvent.preventDefault) theEvent.preventDefault(); 
     }; 
}; 

왼쪽 및 오른쪽 화살표 키와 같은 일부 문자가 표시되면 탭을 더 잘 탐색 할 수 있도록 추가됩니다. Chrome에서 완벽하게 작동합니다. Firefox에서는 의도하지 않게 일부 문자가 추가됩니다. 예를 들어, 왼쪽 화살표 키와 % 키 코드는 모두 동일합니다! 그래서 지금 내 가격 필드는 Firefox에서 %를 받아들입니다! 나는 또한 동일한 문제를 간단하게 표현한 regexp 코드를 발견했다. 어떻게하면 Firefox를 이해하게 할 수 있습니까?!

답변

4

%left arrow key에 대한 keyCode은 실제로 동일하지 않습니다.

  • %
    • .charCode == 37
    • .keyCode == 0
    • .which == 37
  • left arrow
    • .charCode == 0
    • ,691 당신은 함께 ... = theEvent.keyCode || theEvent.which를 통해 프로그램 로직이 아닌 박쥐 우산 코드를 수정해야

  • .which == 0
  • .keyCode == 37
  • .

    (원시) 브라우저가 .key and .char을 올 바르고 완전하게 구현하기 전까지는 키보드 처리가 엉망입니다.

    +0

    차이점을 알지 못했습니다! Txx – farid