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

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

#1楼 票数:1

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

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

#2楼 票数: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,但这不重要。

  ask by karan k translate from so

未解决问题?本站智能推荐:

2回复

在文本框中开始键入时的Jquery文本

我希望当我开始在文本框中键入时, Forgot文本将其替换为View用户可以查看他键入的密码,如果密码文本框为空,则显示默认文本为Forgot 。 如果显示View并使用单击View链接然后在文本框中显示文本或在Hide View替换,如果单击Hide然后文本框文本变为密码格式。我不熟悉jqu
7回复

jQuery默认文本在空白文本框中

我有一个电子邮件表单文本框,当它为空时,我希望它具有值“ E-Mail”。当您单击它时,文本消失。 如果有人单击它并且不输入文本。 在“模糊”上,我希望它恢复为默认文本。 我一直在尝试一些事情,但是没有任何效果。 有人能指出我正确的方向吗?
1回复

如何在jquery中为数组文本框添加值?

如何为名为textbox的数组赋值? 例: 使用jquery将值添加到文本框 上面的脚本不起作用。 请帮我解决这个问题。
3回复

如何在jQuery中更改键盘上的文本框值?

我只想更改键盘上文本框的VALUE属性。 但是,当我输入内容时,标记中的值保持不变。 我也想在标记中更改它。 这是我的jsfiddle 。 标记 jQuery的 任何帮助将不胜感激。
1回复

jQuery时间选择器流出HTML文本框

我正在尝试在文本框中实现时间选择器。 但是时代正在流逝。 有人知道这个问题可能是什么吗? 在我的HTML文件中: ...
3回复

根据验证保留和失去对文本框的关注

我有一个文本框,仅允许用户以mm-dd-yyyy格式输入日期。 如果日期有效,则用户可以将焦点移出文本框,但如果无效,则焦点应保留在文本框内,直到用户更正为止。 目前,我正在使用正则表达式来验证文本框输入,并且能够在无效日期的情况下成功地将焦点集中在文本框内。 我面临的问题是,即使我要更正
2回复

jQuery将文本框的内容放入div中

这是html标记 在单击添加按钮时,我想删除文本框,但是它的内容应该在div中显示出来。 即我想阻止用户修改它,但是禁用文本框不是一种选择。 我该如何实现?
3回复

jQuery使用按钮事件查询启用文本框

如果有人可以提供帮助,我会遇到一个小问题...我正在尝试实现一个表单,因此在页面加载时禁用了文本框。 如果用户希望修改信息,他们首先必须按下一个按钮,该按钮将启用文本框。 所以我有一个基本的文本框被禁用。 然后是一个应启用文本框的事件... 当文本框最初未被禁用并且我想禁用它