验证文本框的Jquery代码无法正常工作

时间:2012-09-17 12:35:05

标签: javascript jquery html textbox

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

我正在使用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;
            }
        });
    });
};

2 个答案:

答案 0 :(得分:1)

e.shiftKey本身会告诉您是否按下了shift,因此您可以直接使用它。您不需要单独的变量来跟踪它。


    $.fn.ValidateKeyDown = function () {
        return this.each(function () {
            if (!e.shiftKey) {
                ...
            }
            else {
                ...
            }
    }

答案 1 :(得分:1)

我注意到e.shiftKey只在key up上返回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结合起来,但这不重要。