如何判断在退格键上删除了哪些键击?

时间:2016-02-17 21:27:07

标签: jquery

我有一个文本框,我想阻止删除某些字母,但允许其他字母删除,我设置我的代码如下:

$("#myTextbox").keydown(function(e) {
    var code = e.keyCode || e.which;
    console.log(code);
    if (code == 8) {
        var valStr = $(this).val();
        // how do I find which keystroke is being deleted?
    }else if(!(code == 57 || code == 48 || code == 37 || code == 39 || code == 32)) {
        e.preventDefault();
        return false;
    }
});

文本框值的一个例子是:

( 1 and 2 ) or 3

用户可以删除“open bracket”,“close bracket”,“space”,但不能删除任何其他内容。

2 个答案:

答案 0 :(得分:1)

你需要在这里处理一个逻辑漏洞。你假设你不能突出显示多个字符并点击一次退格并删除一堆。

我最好的建议是不断跟踪输入值。因此,如果它以“(1和2)或3”开头并且您将其更改为“(1and)3”,则将其与前一个进行比较,并检查是否删除了不在白名单中的字符。如果是这样,把它们放回去,或者放在背面,只取出它们应该取出的那些。

在这个例子中,不应该取出“2”和“或”。要么将它们放回去,要么使用之前的字符串并取出它们所允许的部分。在创建此字符串后,将输入的值设置为该值,但请注意,在输入上设置值不会触发更改事件。如果你想要一个改变事件,那也可以改为“.trigger('change');”在值设置的末尾,这样你就可以:

"$(this).val(new_string).trigger('change');"

至于确定new_string,首先我要定义一个这样的函数:

function is_character_deleteable(character)
{
    if (character == "(" || character == " " || character == ")")
    {
        return true;
    }

    return false;
}

然后我会在你的函数中执行此操作:

实际上,在花了很多时间试图为此提出代码后,我发现了另一个缺陷。你被允许输入字符吗?如果是这样,那么你就会遇到一些问题。

我想知道从不同角度攻击这个会不会更好。显然我不知道你具体做了什么,但也许你可以使用复选框/按钮删除“(”,“)”和“”。

答案 1 :(得分:0)

您需要:
1.找到聚焦的元素(.is(":focus"))
2.获取价值,在每个按键上找到最后一个字符并将其转换为键码:

var myString = $('elem').html();
var lastChar = myString.substr(-1);
var whatYouNeed = lastChar.charCodeAt(0);

我认为这就是全部:)。