0

我正在验证文本框,以便它们只能包含字母、数字和这些特殊字符:` 、 - 。'~

我为此使用了 Jquery 'key-down' 事件。如果用户输入了无效字符,我会阻止它出现在文本框中。为了仅启用波浪号并禁用其他特殊字符,我应该检测是否按住了 shift 键。我为此使用了一个布尔变量。

问题是它允许输入其他特殊字符,如!、$、。它没有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 本身会告诉您是否按下了 shift,以便您可以直接使用它。您不需要单独的变量来跟踪它。

    $.fn.ValidateKeyDown = 函数 () {
        返回 this.each(function () {
            如果(!e.shiftKey){
                ...
            }
            别的 {
                ...
            }
    }

于 2012-09-17T13:09:58.990 回答
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 回答