7

数字しか入力できないJS関数を作成しました。その関数のコピーは以下のとおりです。

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のままです。私はそれが違うと思っていたでしょう。

だから私の質問は、Shiftキーが押されているかどうかをどのように確認するかです。次のチェックを試しましたが、うまくいきませんでした。

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

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


        }
        else {

            evt.returnValue = false;
        }
    }

ASP.NET4.0を使用しています。

どんな助けでもありがたいことに受けられるでしょう。

前もって感謝します。

4

3 に答える 3

15

シフトキーが押されているかどうかは、次を使用して確認できます。

if(evt.shiftKey) {
 ...  //returns true if shift key is pressed
于 2012-05-15T11:02:46.577 に答える
0

event.keyの代わりに使用してくださいcharCodeこれ以上のマジックナンバーはありません!

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

Mozilla Docs

サポートされているブラウザ

于 2017-09-05T21:05:17.417 に答える
0

キーを押すのではなく、キーを押したままにする

于 2020-08-23T13:36:43.343 に答える