【问题标题】:Jquery code for validation textbox is not working correctly用于验证文本框的 Jquery 代码无法正常工作
【发布时间】:2012-09-09 16:05:36
【问题描述】:

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

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

问题是它允许输入其他特殊字符,如 !、$,它不在 ValidateKeyDownisShiftPressed == true 条件内。我在里面放了一个警报,但没有执行。

这是我的代码:

$.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;
            }
        });
    });
};

【问题讨论】:

  • 它不会在击键之间记住isShiftPressed 的值。尝试将 var isShiftPressed = false; 放在函数之外以全局声明它。
  • 是的,它是全球性的..我只是没有在这里提到..抱歉

标签: javascript jquery html textbox


【解决方案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,但这不重要。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多