zoukankan      html  css  js  c++  java
  • js 实现序列号效果实现

    前端的朋友可能遇到过这样的需求,要求在页面输入一串序列号,或激活码(就像在PC正版软件中的序列号),可是HTML中并没有为我们提供类似的组件,我们来自己实现一个:

    大体的思路是在表单里有一个隐藏的input,而表面上用一组input代替:

     1 <form name="" action="" method="post">
     2 <p>
     3 <label>请输入激活码:</label>
     4 <span class="act-code-group">
     5     <input id="act-code-item-1" name="act-code-item-1" class="act-code-item" type="text" /> - 
     6     <input name="act-code-item-2" class="act-code-item" type="text" /> - 
     7     <input name="act-code-item-3" class="act-code-item" type="text" /> - 
     8     <input name="act-code-item-4" class="act-code-item" type="text" />
     9 </span>
    10     <input class="act-code-hidden" type="hidden" value="" />
    11 </p>

    至于式样上的东西就留给大家,自己发挥吧!

    然后我们来处理一下相关逻辑:

     1 function initActCodeGroup(dom){
     2     var $ = jQuery;
     3     var actCodeGroup = dom,
     4         actCodeItem = actCodeGroup.find('.act-code-item');
     5     var ctrlPress = false;
     6     //actCodeItem.attr('maxlength', '5');
     7     actCodeItem.keyup(function(e){
     8         var oldVal = $(this).val();
     9         if(e.keyCode === 8){
    10             // backspace
    11             if(oldVal.length <= 0){
    12                 $(this).prev().focus();
    13             }
    14         }else if(e.keyCode === 86 && ctrlPress){
    15             //ctrl + v
    16             var parseTxt = $(this).val(),
    17                 parseTxtLen = parseTxt.length;
    18 
    19             ctrlPress = false;
    20 
    21             var actCodes = [];
    22             if(parseTxt.indexOf('-') >= 0){
    23                 actCodes = parseTxt.split('-');
    24             }else{
    25                 if(parseTxtLen >= 4){
    26                     actCodes.push(parseTxt.substr(0, 4));
    27                 }else{
    28                     actCodes.push(parseTxt.substr(0, parseTxtLen));
    29                 }
    30                 if(parseTxtLen >= 8){
    31                     actCodes.push(parseTxt.substr(4, 4));
    32                 }else{
    33                     actCodes.push(parseTxt.substr(4, parseTxtLen-4));
    34                 }
    35                 if(parseTxtLen >= 12){
    36                     actCodes.push(parseTxt.substr(8, 4));
    37                 }else{
    38                     actCodes.push(parseTxt.substr(8, parseTxtLen-8));
    39                 }
    40                 if(parseTxtLen >= 16){
    41                     actCodes.push(parseTxt.substr(12, 4));
    42                 }else{
    43                     actCodes.push(parseTxt.substr(12, parseTxtLen-12));
    44                 }
    45             }
    46 
    47             if(actCodes.length > 1){
    48                 var curInput = $(this);
    49                 $.each(actCodes, function(i, v){
    50                     if(curInput && v.length <= 4){
    51                         curInput.val(v);
    52                         curInput = curInput.next();
    53                     }else{
    54                         return false;
    55                     }
    56                 });
    57             }
    58 
    59         }else if(e.keyCode === 17){
    60             setTimeout(function(){
    61                 ctrlPress = false;
    62             }, 1000);
    63         }else{
    64             if(oldVal.length >= 4){
    65                 $(this).val(oldVal.substr(0,4));
    66                 if($(this).next().length > 0){
    67                     $(this).next().focus();
    68                 }
    69             }
    70         }
    71     }).keydown(function(e){
    72         if(e.keyCode === 17){
    73             ctrlPress = true;
    74         }
    75     });
    76 }

    这样就实现了4*4的序列号组件,接下来调用这个初始化函数就好了

    $(document).ready(function(){
            initActCodeGroup($('.act-code-group')); 
    });

    打开浏览器看看我们的序列号组件吧!

  • 相关阅读:
    【原】独立小应用程序性能优化简化版,减少数据库访问次数,提高应用程序处理效率,缓存之 HttpRuntime.Cache
    【转】SQL索引一步到位
    C# Excel读取导入数据库碰到的问题
    VS2010SP1修复补丁&Microsoft Visual Studio 2010 Service Pack 1
    ImportError: No module named ‘MySQLdb'
    【转】(C#)OPC客户端源码
    【转】DCOM远程调用权限设置
    【转】OPC远程访问相关配置信息
    WPF之DataAnnotations 注解说明
    WPF中,输入完密码回车提交 ,回车触发按钮点击事件
  • 原文地址:https://www.cnblogs.com/webARM/p/4311651.html
Copyright © 2011-2022 走看看