Java 如何制作序列号表格?加上-&引用;中间分裂

Java 如何制作序列号表格?加上-&引用;中间分裂,java,javascript,html,regex,jsp,Java,Javascript,Html,Regex,Jsp,我想在HTML上制作一个表单,供用户提交序列代码。看起来是这样的: XX-XX-XX-XX-XX-XX-XX 但是我不希望用户手动输入“-”s 我有两种可能的解决办法 我的第一个计划是为每个部分制作多个,并添加一个选项卡索引,但这对手机用户来说仍然太难了,因为Android没有类似选项卡的功能来滚动6s。这意味着他们将不得不处理轻敲超小型输入框的问题,并体验键盘上下弹出的故障 我可以使文本框由Javascript控制,并使其选中该框并自动用“-”分隔代码。但是想象一下如果你有 01-02-03-

我想在HTML上制作一个表单,供用户提交序列代码。看起来是这样的:

XX-XX-XX-XX-XX-XX-XX

但是我不希望用户手动输入“-”s

我有两种可能的解决办法

  • 我的第一个计划是为每个部分制作多个,并添加一个选项卡索引,但这对手机用户来说仍然太难了,因为Android没有类似选项卡的功能来滚动6s。这意味着他们将不得不处理轻敲超小型输入框的问题,并体验键盘上下弹出的故障

  • 我可以使文本框由Javascript控制,并使其选中该框并自动用“-”分隔代码。但是想象一下如果你有

  • 01-02-03-09-05-06

    如果您想更改“09”,如果用户删除“9”,它将出现故障,如下所示:

    01-02-03-00-50-6

    我认为这还不够好。我想让它更适合用户


    那么专业人士是如何做到的呢?计划1中的光标是否可能自动从一个跳到下一个这类输入有一个很棒的jquery插件:

    代码:

    首先,包括jQuery和屏蔽输入javascript文件

    <script src="jquery.js" type="text/javascript"></script>
    <script src="jquery.maskedinput.js" type="text/javascript"></script>
    
    (可选)如果您不满意下划线(“”)字符作为占位符,可以将可选参数传递给maskedinput方法

    jQuery(function($){
       $("#product").mask("99/99/9999",{placeholder:" "});
    });
    
    jQuery(function($){
       $("#product").mask("99/99/9999",{completed:function(){alert("You typed the following: "+this.val());}});
    });
    
    或者,如果希望在掩码完成后执行函数,可以将该函数指定为maskedinput方法的可选参数

    jQuery(function($){
       $("#product").mask("99/99/9999",{placeholder:" "});
    });
    
    jQuery(function($){
       $("#product").mask("99/99/9999",{completed:function(){alert("You typed the following: "+this.val());}});
    });
    

    等等…

    只需使用本机JavaScript即可。对于这样简单的事情,您不需要jQuery

    您需要做的是检查输入字符串的长度。如果这是2,5,8,11,…,自动添加破折号。下一个条件将为这些值返回
    true
    value.length%3==2
    。您应该在
    keydown
    事件中检查这一点,因为这会在用户输入内容后触发

    document.getElementById('serial').addEventListener('keydown', function (e) {
        var value = this.value;
    
        // 17 is the max length of the serial XX-XX-XX-XX-XX-XX-XX
        if (value.length < 17) {
            if (value.length % 3 == 2 && value.substr(value.length - 1, 1) !== '-') {
                this.value = this.value + '-';
            }
        }
    }, false);
    
    document.getElementById('serial').addEventListener('keydown',函数(e){
    var值=此值;
    //17是序列号XX-XX-XX-XX-XX-XX-XX-XX-XX的最大长度
    如果(值。长度<17){
    如果(value.length%3==2&&value.substr(value.length-1,1)!=='-')){
    this.value=this.value+'-';
    }
    }
    },假);
    

    寄出表格时,是否会包括名额持有人?或者它只是一个占位符?它只是一个占位符,当你输入一些数字时,占位符就消失了。
    -
    保持在那里。正如您所想:)虽然:01-02-03-00-50-6仍然存在问题,但我想这已经是最好/最简单的方法了。这让我想起:您不需要jQuery或任何库来完成此操作。@Keessonema我2秒钟前才发现,这真的很简单。我会考虑你将来的解决方案!谢谢你告诉我这件事plugin@KeesSonnema虽然这是我最初的计划,但我认为会有一种神奇的方法来防止这种情况发生:01-02-03-00-50-6。但现在我想起来了,这不是什么大问题,我想……(考虑到努力的程度)我可能会使用你的解决方案。我不确定我应该给哪一个打绿色标记。。。因为你的两个答案都是非常好的答案。如果你检查这个答案是否正确,你可以给我的答案投票,如果你还没有:)如果你添加
    value.substr(value.length-1,1)!=“-”
    切换到第二个条件,如果它可以防止这种情况发生。我将编辑我的答案。当用户键入太快时,代码会出现问题。也许循环遍历字符串比添加字符串更好。