我有一个 IMEI 号码输入字段,该字段应该只包含 15 位数字,并且只能是数字。我已经完成了,下面的代码只需要 15 位数字,并在 4 位数字后留一个空格。
但我在这里面临的主要问题是,如果你持有任何数字,它将需要 18 位数字。因为当我们快速打字时,它也在计算空格。 这是指向 try here 的 fiddle 链接
串号
$(".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();
}
});
最佳答案
将keyup
更改为keypress
:
$(".imei").on('keypress', function() {
keyup
仅在您放开按键时才会触发,而 keypress
将在每次将按键发送到输入时触发。
保留 keydown
代码,因为它用于限制允许的内容。
更新的 fiddle :http://jsfiddle.net/1zLwgf66/1/
<小时/>keypress
的问题是它发生在按键发送到输入之前。您可以通过在运行代码之前将 key 添加到输入中来解决此问题,或者通过添加简单的 setTimeout 等待默认代码完成。使用 setTimeout 时,您会遇到关闭问题,因此您需要复制 this
:
$(".imei").on('keypress', function() {
var inp = this;
setTimeout(function() {
var foo = $(inp).val().split(" ").join("");
更新的 fiddle :http://jsfiddle.net/1zLwgf66/2/
关于javascript - 如何将 IMEI 号码限制为仅 15 位数字且不计算 4 位数字后的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40135680/