可能的重复:
关键事件新值
没有找到我要寻找的答案,尝试了一段时间,变得绝望:
我的目标是拥有一个数字非负输入字段,该字段可以是十进制的,并具有一个字母的单个字符后缀(存在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);