2012-05-15 5 views
5

数字のみを入力できるJS関数を書いています。その関数のコピーは以下の通りです:JavaScriptでシフトキーを押したままにする

function NumbersOnly(e) { 
    var evt = e || window.event; 
    if (evt) { 
     var keyCode = evt.charCode || evt.keyCode; 
     //Allow tab, backspace and numbers to be pressed, otherwise return false for everything. 
     //(keyCode>=96 && keyCode<=105) are the numpad numbers   
     if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) { 


     } 
     else { 

      evt.returnValue = false; 
     } 
    } 
} 

この機能は、すべての数字と正常に動作しますが、Shiftキーを押していると数字キーのいずれかが押されたときに、私の問題が起こります。返される値は、数値の上にある文字の1つです。たとえばshiftを押しながら7を押すと、 '&'が返されますが、keyCodeはまだ55です!私はそれが違うと予想していたでしょう。

私の質問はシフトキーが押されているかどうかを確認する方法です。 私は次のチェックを試してみたが、これは動作しませんでした:私は、ASP.NET 4.0を使用してい

if (keyCode === 16) { 
     evt.returnValue = false; 
    } 
    else { 

     if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) { 


     } 
     else { 

      evt.returnValue = false; 
     } 
    } 

感謝の気持ちで助けてください。

ありがとうございます。

+0

あなたがにconsole.logでEVTを与える場合は、Shiftキーが押された場合、それはブリリアント真 –

答えて

12

シフトキーを使用して押されたかどうかをチェックすることができます:

if(evt.shiftKey) { 
... //returns true if shift key is pressed 
+0

になるだろう、shiftKey属性が表示されます。これは機能します。ありがとうございました – Sun

+0

私のために 'evt.shiftKey'はうまくいかず、' event.shiftKey'に変更してください。それが動作します。 – Shafizadeh

+0

@Sajad、あなたはその点を見逃しています。 'evt'は単なる変数ですが、私の答えでは、上記の質問の文脈で 'evt'が使われています。変数 'evt'は次の行にあります:var evt = e || window.event;あなたは今それを得ることを願っています。 –

0

使用event.keyの代わりcharCodeマジックナンバーはもうありません!

function onEvent(event) { 
    const key = event.key; // "a", "1", "Shift", etc. 
    if (isFinite(key)) { // Is number 
     // Do work 
    } 
}; 

Mozilla Docs

Supported Browsers

関連する問題