2017-10-01 33 views
1

정규식을 사용하지 않고 텍스트 입력을 0-9의 숫자로만 제한하려고합니다.jQuery "keyup"vs "keydown"vs "keypress"

$("input[type='text']").on('keypress', function(e){ 
 
    if(e.which>=48 && e.which<58){ 
 
     return true; 
 
    }else{ 
 
     return false; 
 
    } 
 
})
<input type="text"> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

내 질문은 : : "단지 의 키를 특수 문자의 입력을 방지 왜이 경우,"그리고, 아래에있는 내 코드입니다

+0

당신이 [트리거 JS/jQuery를에 키 누르기 /를 keyDown /의 keyup 이벤트?]의 키를 누를 때 –

+0

가능한 중복을 지정했기 때문에 (HTTPS :/여기에 설명 된대로 조합을 감지하는 map 그들에게 필요한 것을 해결하기 위해 /stackoverflow.com/questions/3368578/trigger-a-keypress-keydown-keyup-event-in-js-jquery) –

+0

방법에 의해 ** type = number **이 (가) html로 사용하면 –

답변

1

keypress 동일한 키 코드를 반환하지 않습니다. 예를 들어, console.log(e.which)을 함수에 추가하고 백 스페이스 키를 누르면 아무 것도 실행되지 않습니다. 그러나 다른 키를 누르면됩니다. 또한 키 누르기는 홀수 키 코드로 "시프트 + 숫자"조합을 감지하므로 함수에서 false를 반환합니다. 예를 들어 "shift + 1"은 33을 반환하지만 33은 "page up"을 의미해야합니다.

keyup 문자가 keydown에 렌더링되므로 키 업이 너무 늦습니다. (당신은 keydown없는 keyup 이벤트가 처음 발생 할 수 없습니다.) 이러한 특수 문자를 keyDown/keup 이벤트 (이동 더한 숫자)의 조합을 필요로하기 때문에

keydown 는 특수 문자를 방지하지 않습니다. 따라서 keydown은 Shift 키를 누르고 있어도 false가 반환 되더라도 숫자를 누르면 즉시 true를 반환합니다. Detect multiple keys on single keypress event in jQuery

+0

"keydown"을 사용하면 숫자가 아닌 문자를 입력 할 수 있습니다 :! @ # $ %^& *(). 또한, 그것은 "백 스페이스/삭제 키/탐색 화살표"의 사용을 방지, 나는 이러한 키가 작동 싶어요! –

+0

원래 질문보다 분명합니다. 답변이 업데이트되었습니다. –

+0

감사. 그래서 "Shift"키가 엉망이되었습니다 :) –