0

私はこのJavaScriptコードを持っており、テキストボックスへの数値入力のみを許可しています

    function CheckNumeric(e) {

        if (window.event) // IE 
        {
            if ((e.keyCode < 48 || e.keyCode > 57) & e.keyCode != 8) {
                event.returnValue = false;
                return false;
            }
        }
        else { // Fire Fox
            if ((e.which < 48 || e.which > 57) & e.which != 8) {
                e.preventDefault();
                return false;
            }
        }
    }

問題は、「TAB」ボタンも妨げていることです。私はそれを許可したいです。

どうやってやるの?

4

3 に答える 3

2

関数をこのようなものに変更しCheckNumeric、正規表現を使用して有効/無効な入力を判別します。/[0-9\t\b]+/数字、タブ、バックスペースに一致します。スペースも許可したい場合は、次のように変更します/[0-9\t\b\s]+/

function CheckNumeric(e)
{
    var charCode = e.charCode || e.keyCode;
    var character = String.fromCharCode(charCode);
    if(!character.match(/[0-9\t\b]+/))
    {
        if(window.event)
            event.returnValue = false;
        else
            e.preventDefault();
        return false;
    }
    return true;
}

さらに、キーコードを正しくキャプチャするには、テンキーに正しいキーコードが提供されないため、onKeyPress代わりにイベントにバインドする必要があります。onKeyDown

<input type="text" onkeypress="CheckNumeric(event)"/>
于 2012-12-06T17:43:27.627 に答える
0

私がここで使用することを好むアプローチ(よりクリーンなコード、より単純なロジック)は、html5属性を使用することです(type="number"またはpattern="[0-9]*"うまく機能します)。

input type="number"でwebkitのスピンボタンを無効にするを参照してください。<input type="number">スピナーを使用して無効にしたい場合。

この動作で古いブラウザを本当にサポートする必要がある場合は、html5フォーム属性をサポートするshimの使用を検討してください。

于 2012-12-06T17:41:10.047 に答える
0

KeyCode8はバックスペース用です。誤って追加したかどうかはわかりません。

function CheckNumeric(e) {

    if (window.event) // IE 
    {
        if ((e.keyCode < 48 || e.keyCode > 57) & e.keyCode != 8 & e.keyCode != 9) {
            event.returnValue = false;
            return false;
        }
    }
    else { // Fire Fox
        if ((e.which < 48 || e.which > 57) & e.which != 8  & e.which != 9) {
            e.preventDefault();
            return false;
        }
    }
}
于 2012-12-06T17:36:25.473 に答える