JavaScript输入验证使用按键,获得之前和之后的值



可能的重复:
关键事件新值

没有找到我要寻找的答案,尝试了一段时间,变得绝望:

我的目标是拥有一个数字非负输入字段,该字段可以是十进制的,并具有一个字母的单个字符后缀(存在Legel后缀集合)。

在技术层面上 - 我需要能够拒绝输入字符,并且我需要两个值(输入之前和之后)。

接近我尝试过的&失败:

键盘键盘事件:

无法获得"后",即以前和char/keyCode。这是一个问题,因为我不知道在哪里插入旧值的新字符(最终不是必需的。P>

键盘事件:

没有之前的值,但更糟糕的是 - 当按很长的按下时,这不会发射(" 00000000000000000 ..."),所以我不能拒绝输入。

onChange/change/change/blur - 仅在损失焦点上发射,而不是我需要的功能。

有什么想法?

如何将当前值保存在隐藏字段中,并在必要时对其进行更新?这将使您可以访问"之前"one_answers"之后"状态。

这不是一个很好的方法,但是考虑到它几乎不可能获得上一个值,我会考虑的。

我宁愿将您指向另一个方向。在一个较早的项目中,我遇到了同样的问题。我通过使用jQuery插件使其如此。一个所谓的"蒙版输入"。

然后,您将能够就该字段的输入如何由用户提供正则表达式。

这是插件的githup ressource!https://github.com/digitalbush/jquery.maskedinput

您可以在此处找到示例和文档!

一个例子:

jQuery(function($){
    $("#element-id").mask("9.99a");
});

可用的许多选项,只需查看创建自己的口罩的能力!

是不可能知道 onkeypress之后的值。是的,我们知道按键(和修饰符),并且知道选择/光标,以便我们模拟keypress事件的preventDefaultAction。但是,我们对键盘布局的假设可能是错误的,并且有太多的边缘案例输入方法我们几乎无法处理所有这些方法。

我提出的解决方案是手动维护输入状态,并尽可能多地寻找更改。如果发生的话,处理程序将用以前和状态后发射,并返回新值。这就是外观:

function handler(afterval, prevval) {
    // do something
    return afterval; // return val can be used for length limits etc
}
(function(el, handler) {
    var curval = el.value;
    function check(e) {
        if (el.value != curval)
            curval = el.value = handler(el.value, curval);
    }
    $(el)
      .on("keyup input keydown change mouseup cut paste focus", check)
      .on("keypress", function(e) {
        check(e);
        setTimeout(check, 0); // also check after keypress as soon as possible
      });
})(handler);

相关内容

  • 没有找到相关文章

最新更新