2017-10-01 4 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

あなたがキー入力 –

+0

の可能性の重複を指定したため、[JS/jQueryの中にキー入力/ KeyDownイベント/からkeyupイベントをトリガ?](HTTPS:/ /stackoverflow.com/questions/3368578/trigger-a-keypress-keydown-keyup-event-in-js-jquery) –

+0

ところで** type = number **がhtmlにありますが、それは –

答えて

1

keypressは、同じキーコードを返しません。たとえば、関数にconsole.log(e.which)を追加してバックスペースを押すと、何も起動しません。しかし、別のキーを押すと、そのキーが押されます。また、keypressは "shift + number"の組み合わせを奇数のキーコードとして検出するので、関数内でfalseを返します。例えば、 "shift + 1"は33を返しますが、33は "page up"を意味します。

keyup文字がキーダウンでレンダリングされるため、キーアップが遅すぎます。これらの特殊文字はkeup/KeyDownイベントのイベント(シフトプラス数)の組み合わせを必要とするため(あなたが最初に発生​​なしkeyupイベントを持つことができません。)

​​は、特殊文字を防ぐことはできません。したがって、​​は、シフトキーを押し続けてfalseを返しても、数値が押されるとすぐにtrueを返します。あなたはここで説明するように組み合わせを検出するmapにそれらを必要とすることに対処するために:Detect multiple keys on single keypress event in jQuery

+0

"keydown"を使用すると、数字以外の文字を入力できます:!@#$%^&*()。また、 "back space/delete key/navigational arrows"の使用を防ぎます。これらのキーを機能させたい! –

+0

元の質問よりも明らかです。回答が更新されました。 –

+0

ありがとうございます。だからそれは "シフト"キーが台無しだった:) –

関連する問題