如何将IMEI号限制为仅15位数而不计算4位后的空格

时间:2016-10-19 15:25:54

标签: javascript jquery html html5

我有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();
        }
    });

1 个答案:

答案 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(""); 

更新了小提琴:http://jsfiddle.net/1zLwgf66/2/