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

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

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

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

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

 function initActCodeGroup(dom){
var $ = jQuery;
var actCodeGroup = dom,
actCodeItem = actCodeGroup.find('.act-code-item');
var ctrlPress = false;
//actCodeItem.attr('maxlength', '5');
actCodeItem.keyup(function(e){
var oldVal = $(this).val();
if(e.keyCode === 8){
// backspace
if(oldVal.length <= 0){
$(this).prev().focus();
}
}else if(e.keyCode === 86 && ctrlPress){
//ctrl + v
var parseTxt = $(this).val(),
parseTxtLen = parseTxt.length; ctrlPress = false; var actCodes = [];
if(parseTxt.indexOf('-') >= 0){
actCodes = parseTxt.split('-');
}else{
if(parseTxtLen >= 4){
actCodes.push(parseTxt.substr(0, 4));
}else{
actCodes.push(parseTxt.substr(0, parseTxtLen));
}
if(parseTxtLen >= 8){
actCodes.push(parseTxt.substr(4, 4));
}else{
actCodes.push(parseTxt.substr(4, parseTxtLen-4));
}
if(parseTxtLen >= 12){
actCodes.push(parseTxt.substr(8, 4));
}else{
actCodes.push(parseTxt.substr(8, parseTxtLen-8));
}
if(parseTxtLen >= 16){
actCodes.push(parseTxt.substr(12, 4));
}else{
actCodes.push(parseTxt.substr(12, parseTxtLen-12));
}
} if(actCodes.length > 1){
var curInput = $(this);
$.each(actCodes, function(i, v){
if(curInput && v.length <= 4){
curInput.val(v);
curInput = curInput.next();
}else{
return false;
}
});
} }else if(e.keyCode === 17){
setTimeout(function(){
ctrlPress = false;
}, 1000);
}else{
if(oldVal.length >= 4){
$(this).val(oldVal.substr(0,4));
if($(this).next().length > 0){
$(this).next().focus();
}
}
}
}).keydown(function(e){
if(e.keyCode === 17){
ctrlPress = true;
}
});
}

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

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

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

js 实现序列号效果实现的更多相关文章

  1. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  2. 用js实现动画效果核心方式

    为了做好导航菜单,有时候需要在菜单下拉的时候实现动画效果,所以这几天就研究了研究如何用js实现动画效果,实现动画核心要用到两个函数,一个是setTimeOut,另一个是setInterval. 下边我 ...

  3. js拖拽效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)

    虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢. <!DOCTYPE html><html lang=&qu ...

  5. 原生JS实现分页效果1.0

    不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en">&l ...

  6. 使用JS实现手风琴效果

    想要实现简单的手风琴切换效果,需要使用JS实现,如下是使用javascript源码实现,后续会更新使用jQuery实现. 1. 先进行简单的布局:我们可以再ul下添加几个li实现html的简单布局,再 ...

  7. js弹窗登录效果(源码)--web前端

    1.JS弹窗登录效果 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  8. 原生JS实现弹幕效果

    纯属无聊写的,可能有很多问题,欢迎批评指教. 效果图:图一是预设的一些弹幕,图二是自己发射的弹幕,效果是一样的.   首先是弹幕的位置,是要从最右滑到最左,为了防止随机高度弹幕会覆盖的问题,设置了通道 ...

  9. JS添加标签效果

    JS添加标签效果 在豆瓣网上添加自己的标签是一种常见的效果,今天也就做了一个简单的demo.由于时间的问题 我不多原理,大家可以试着操作几遍就能明白其中的原理了. JSFiddle的效果如下: 点击我 ...

随机推荐

  1. JavaSE---抽象类

    1.前言 某些情况下,父类只是知道子类应该有什么方法,而不知道具体如何实现. eg:Shape类中应该有个计算周长的方法,而不同的子类由具体不同的实现: ***解决1: 不管父类,直接在子类中定义方法 ...

  2. 根据时间显示不同的问候语的JavaScript代码

    对于最近有许多的初学开发者问我关于根据时间显示不同的问候语的JavaScript代码问题,所以今天将自己整理的一些代码在这里分享出来,供初学者参考,如果在运行过程中有问题,可以给我在下方留言. < ...

  3. 【Ionic】---$ionicLoading ion-spinner SVG旋转加载的动画图标

    ionic 加载动作 $ionicLoading $ionicLoading 是 ionic 默认的一个加载交互效果.里面的内容也是可以在模板里面修改. 用法 angular.module('Load ...

  4. CentOS搭建KMS服务器

    安装 使用命令: #CentOS,Redhat,Fedora等请选择CentOS脚本 wget https://raw.githubusercontent.com/dakkidaze/one-key- ...

  5. Spring框架中stopwatch(秒表)

    StopWatch对应的中文名称为秒表,经常我们对一段代码耗时检测的代码如下: long startTime = System.currentTimeMillis(); // 你的业务代码 long ...

  6. wamp的安装

    1.下载wamp. 2.如果安装了apache,先卸载. 进入到你的apache的bin目录,输入指令 httpd.exe -k stop停止服务,再输入httpd.exe -k uninstall. ...

  7. MySQL(三) 完整性约束

    一.介绍 约束条件与数据类型的宽度意义,都是可选参数. 作用:用于保证数据的完整性和一致性. 主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN ...

  8. css颜色 hsla 和line-gradient

    h 表示色调 从0-360 s 饱和度  0 - 100% l 亮度    0 -100% a 透明度  0-1

  9. AngularJS 指令解析(一)

    AngularJS 指令解析(一) 前言 笔者AngularJS接触时间差不多是两年多,虽然这两年多AngularJS版本日新月异,但是笔者的版本是比较老的1.4.3,一方面是自己对这个版本比较熟悉, ...

  10. Windows环境下sublime text 3搭建前端开发环境

    一.安装SubLime Text 3 SubLime Text 3官网下载:https://www.sublimetext.com/ 二.安装Package Control 进入sublime后,按快 ...