0

文字、数字、およびこれらの特殊文字のみを含めることができるように、テキスト ボックスを検証しています: ` 、 - 。' ~

これには Jquery の「キーダウン」イベントを使用しています。ユーザーが無効な文字を入力した場合、テキスト ボックスに表示されないようにします。チルダだけを有効にし、他の特殊文字を無効にするには、シフト キーが押されているかどうかを検出する必要があります。これにはブール変数を使用しました。

問題は、!、$ などの他の特殊文字を入力できるようになっているisShiftPressed == trueことですValidateKeyDown。その中にアラートを入れましたが、実行されませんでした。

これは私のコードです:

$.fn.ValidateKeyDown = function () {
    return this.each(function () {
        $(this).keydown(function (e) {
            if (e.shiftKey) {
                isShiftPressed = true;
                return;
            }
            else if (isShiftPressed == false) {
                var n = e.keyCode;
                if (!((n == 8)                      // backspace
                        || (n == 9)                 // Tab
                        || (n == 46)                // delete
                        || (n >= 35 && n <= 40)     // arrow keys/home/end
                        || (n >= 65 && n <= 90)     // alphabets
                        || (n >= 48 && n <= 57)     // numbers on keyboard
                        || (n >= 96 && n <= 105)     // number on keypad
                        || (n == 109)                       //(- on Num keys)
                        || (n == 189) || (n == 190) || (n == 222) || (n == 192)             //hypen,period,apostrophe,backtick
                        )
                        ) {
                    e.preventDefault();     // Prevent character input
                    return false;
                }
            }
            else if (isShiftPressed == true) {
                var n = e.keyCode;
                if (n != 192) {
                    e.preventDefault();     // Prevent character input
                    return false;
                }
            }
            return true;
        });
    });
};
$.fn.ValidateKeyUp = function () {
    return this.each(function () {
        $(this).keyup(function (e) {
            if (e.shiftKey) {
                isShiftPressed = false;
            }
        });
    });
};
4

2 に答える 2

1

e.shiftKey はキーを押したときにのみ true を返すため、isShiftPressed は常に false であることに気付きました。代わりにこれを試してください

$.fn.ValidateInput = function () {
return this.each(function () {

    $(this).keydown(function (e) {
        var n = e.keyCode;

        if (n == 16) {
            isShiftPressed = true;
            return;
        }

        if (!isShiftPressed) {
            if (!((n == 8)                      // backspace
                    || (n == 9)                 // Tab
                    || (n == 46)                // delete
                    || (n >= 35 && n <= 40)     // arrow keys/home/end
                    || (n >= 65 && n <= 90)     // alphabets
                    || (n >= 48 && n <= 57)     // numbers on keyboard
                    || (n >= 96 && n <= 105)     // number on keypad
                    || (n == 109)                       //(- on Num keys)
                    || (n == 189) || (n == 190) || (n == 222) || (n == 192)             //hypen,period,apostrophe,backtick
                    )) {
                e.preventDefault();     // Prevent character input
                return false;
            }
        }
        else if (isShiftPressed) {
            if (n != 192) {
                e.preventDefault();     // Prevent character input
                return false;
            }
        }
        return true;
    })
    .keyup(function (e) {
        if (e.keyCode == 16) {
            isShiftPressed = false;
        }
    });
});
};

注: ValidateKeyup と ValidateKeydown も組み合わせましたが、それは問題ではありません。

于 2012-09-17T13:21:49.767 に答える
1

e.shiftKey 自体は、シフトが押されているかどうかを示しているので、それを直接使用できます。それを追跡するために別の変数は必要ありません。

    $.fn.ValidateKeyDown = 関数 () {
        return this.each(function () {
            if (!e.shiftKey) {
                ...
            }
            そうしないと {
                ...
            }
    }

于 2012-09-17T13:09:58.990 に答える