0

テキスト入力フィールドに数字のみを許可したい。これは私がしたことです:

$(document).on("keypress", ".numeric", function (e) {

    if(($(this).attr("class")).indexOf("price") >= 0) {

        if (e.which != 8 && e.which != 0 && e.which != 190 && (e.which < 48 || e.which > 57)) {

            //display error message
            $(this).css("background-color", "rgb(245, 203, 203)");
            $(this).css("border", "1px solid #FF0000");    
            $(this).attr("placeholder", "Enter only numbers");
            return false;
        }
    }
}

10進数を許可するように追加e.which != 190しましたが、機能しません。そして、それが機能する場合、ユーザー12.9.32.は間違っているような何かを入力できるようになります。

これについて何か考えはありますか?ありがとうございました

4

3 に答える 3

0

あなたが説明していることとまったく同じように、次のコードを使用しています。小数点記号は 1 つだけ使用できます (. または ,)

$elm.on('keypress', function(e){
    //Only allow 0-9, '.' and backspace (charCode 0 in Firefox)
    if(e.charCode == 46 || e.charCode == 44){
        var currentContents = $input.val();
        return !(currentContents.indexOf(',') !== -1 || currentContents.indexOf('.') !== -1);
    }
    return (e.charCode >= 48 && e.charCode <= 57) || e.charCode === 0;
})
于 2013-11-13T14:20:14.767 に答える
0

コメントのアドバイスに従って、正規表現を使用して問題を解決し、キーボードの種類に依存しない一般的なコードを作成しました。興味があるか、誰かを助けることができる場合に備えて、このソリューションを投稿しています。

$(document).on("keypress", ".numeric", function (e) {
    if(($(this).attr("class")).indexOf("price") >= 0) {

        var price = String.fromCharCode(e.which);

        //if the letter is not digit then display error and don't type anything
        if(/^[0-9]+\.?[0-9]*$/.test($(this).val() + price) == false) {
            $(this).css("background-color", "rgb(245, 203, 203)");
            $(this).css("border", "1px solid #FF0000");    
            $(this).attr("placeholder", "Enter only numbers");
            return false;
        }
        else {
            $(this).css("background-color", "#fff");
            $(this).removeAttr( "placeholder");
        }
    }
});

Keypressユーザーが私の正規表現を尊重しないものを入力することを許可していませんでした。keypress イベントを使用すると、入力された文字はまだ書き込まれていない$(this).val()ため、入力値全体を取得するために使用することはできません。これを使用すると、古い入力値のみが取得String.fromCharCode(e.which)されます。入力の古い値$(this).val() + price

ありがとうございました。

于 2013-11-13T17:14:59.277 に答える