我有imei号码的输入字段,它应该只有15位,只应该是数字。我已经完成了,我的代码只需要15位数,并在4位数后留下空格。
但我面临的主要问题是,如果你持有任何数字,它将需要18位数。因为当我们快速输入时,它也是couting space。 这是 try here
的小提琴链接IMEI
$(".imei").on('keyup', function() {
var foo = $(this).val().split(" ").join("");
if (foo.length > 0) {
foo = foo.match(new RegExp('.{1,4}', 'g')).join(" ");
}
$(this).val(foo);
});
$(".imei").keydown(function (e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: Ctrl+C
(e.keyCode == 67 && e.ctrlKey === true) ||
// Allow: Ctrl+X
(e.keyCode == 88 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
});
答案 0 :(得分:1)
将keyup
更改为keypress
:
$(".imei").on('keypress', function() {
keyup
只会在您放开密钥时触发,而keypress
会在每次将密钥发送到输入时触发。
保留keydown
代码,因为它用于限制允许的内容。
更新了小提琴:http://jsfiddle.net/1zLwgf66/1/
keypress
的问题在于在密钥发送到输入之前发生。您可以通过在运行代码之前将键添加到输入中,或者通过添加简单的setTimeout等待默认代码完成来解决此问题。使用setTimeout,您将遇到关闭问题,因此您需要复制this
:
$(".imei").on('keypress', function() {
var inp = this;
setTimeout(function() {
var foo = $(inp).val().split(" ").join("");