记录JavaScript中使用keyup事件做输入验证(附event.keyCode表)
input的blur事件
$("#input-name").blur(function () {
var value = $(this).val();
if (value === '') {
return;
}
if (/^[\u4e00-\u9fa5]{1,3}$/.test(value)) {
$(this).removeClass("error-class");
} else {
$(this).addClass("error-class");
}
});
keyup事件
$(document).on('keyup', '.error-class', function (event) {
// Avoid revalidate the field when pressing one of the following keys
// Shift => 16
// Ctrl => 17
// Alt => 18
// Caps lock => 20
// End => 35
// Home => 36
// Left arrow => 37
// Up arrow => 38
// Right arrow => 39
// Down arrow => 40
// Insert => 45
// Num lock => 144
// AltGr key => 225
//keyup事件中需要排除掉的按键,因为这些按键并不会改变input的value
var excludedKeys = [
16, 17, 18, 20, 35, 36, 37,
38, 39, 40, 45, 144, 225
];
//event.which === 9 是键盘左侧的Tab键,当input失焦且值为空时,不需要做验证
if (event.which === 9 && $(this).val() === "" || $.inArray(event.keyCode, excludedKeys) !== -1) {
return;
}
//验证输入内容,验证通过就移除报错样式error-class,反之则添加
if (/^[\u4e00-\u9fa5]{1,3}$/.test($(this).val())) {
$(this).removeClass("error-class");
} else {
$(this).addClass("error-class");
}
});
keyup事件代码是我从著名的jq表单验证插件jquery.validate.js扣出来的。
但在某些内容较为简单的页面,使用jquery.validate.js让我觉得太累赘,我就扣出来手写了这个验证,发现这里的事件绑定技巧和keyCode比较有用,特此记录一下。
事件绑定思路
首先,对input的blur事件绑定处理方法,用正则验证输入;验证通过移除报错样式error-class,反之则添加;
其次,使用$(document).on('keyup', '.error-class',function(){}) 为含有报错样式error-class的元素绑定keyup事件处理方法;
关键点就在于keyup事件处理方法要绑定在含有error-class的元素上,如果一开始对input绑定keyup事件处理方法,那么用户在敲击第一个按键时就触发了keyup事件进行正则验证,若正则要求至少3个字符,而用户只敲了一个字符便出现了报错信息,用户还没有输入完毕就提示错误这样的交互设计是不允许的。
正确的交互是:1、用户首次输入时,让其输入完毕后(即blur事件)才做正则验证,blur事件处理方法对用户的完整输入进行正则验证,反馈错误信息;2、用户根据反馈修正输入,当错误内容被修改至正确时则立即(keyup事件)移除报错样式;3、内容没有错误的input不触发keyup事件处理方法。
虽然blur事件的处理方法也会移除报错样式,但没有keyup事件处理的及时;相对blur而言,使用keyup事件可以提升页面的友好度。
另外,这里为什么不用$(".error-class").keyup()绑定事件处理方法,而是用$(document).on('keyup'),不懂的同学查一下两者的差异就明白了。
event.which、event.keyCode、event.charCode的区别
三者是之前为适应不同浏览器而产生的,其中event.which 将 event.keyCode 和 event.charCode 标准化了。JQuery官方推荐使用event.which:http://api.jquery.com/event.which/ 。
随着时代变迁,目前主流、新版的浏览器对event.which和event.keyCode都有很好的支持。
keyCode表
| 字母和数字键的键码值(keyCode) | |||||||
| 按键 | 键码 | 按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
| A | 65 | J | 74 | S | 83 | 1 | 49 |
| B | 66 | K | 75 | T | 84 | 2 | 50 |
| C | 67 | L | 76 | U | 85 | 3 | 51 |
| D | 68 | M | 77 | V | 86 | 4 | 52 |
| E | 69 | N | 78 | W | 87 | 5 | 53 |
| F | 70 | O | 79 | X | 88 | 6 | 54 |
| G | 71 | P | 80 | Y | 89 | 7 | 55 |
| H | 72 | Q | 81 | Z | 90 | 8 | 56 |
| I | 73 | R | 82 | 0 | 48 | 9 | 57 |
| 数字键盘上的键的键码值(keyCode) | 功能键键码值(keyCode) | ||||||
| 按键 | 键码 | 按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
| 0 | 96 | 8 | 104 | F1 | 112 | F7 | 118 |
| 1 | 97 | 9 | 105 | F2 | 113 | F8 | 119 |
| 2 | 98 | * | 106 | F3 | 114 | F9 | 120 |
| 3 | 99 | + | 107 | F4 | 115 | F10 | 121 |
| 4 | 100 | Enter | 108 | F5 | 116 | F11 | 122 |
| 5 | 101 | - | 109 | F6 | 117 | F12 | 123 |
| 6 | 102 | . | 110 | ||||
| 7 | 103 | / | 111 | ||||
| 控制键键码值(keyCode) | |||||||
| 按键 | 键码 | 按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
| BackSpace | 8 | Esc | 27 | Right Arrow | 39 | -_ | 189 |
| Tab | 9 | Spacebar | 32 | Dw Arrow | 40 | .> | 190 |
| Clear | 12 | Page Up | 33 | Insert | 45 | /? | 191 |
| Enter | 13 | Page Down | 34 | Delete | 46 | `~ | 192 |
| Shift | 16 | End | 35 | Num Lock | 144 | [{ | 219 |
| Control | 17 | Home | 36 | ;: | 186 | \| | 220 |
| Alt | 18 | Left Arrow | 37 | =+ | 187 | ]} | 221 |
| Cape Lock | 20 | Up Arrow | 38 | ,< | 188 | '" | 222 |
| 多媒体键码值(keyCode) | |||||||
| 按键 | 键码 | 按键 | 键码 | 按键 | 键码 | 按键 | 键码 |
| 音量加 | 175 | ||||||
| 音量减 | 174 | ||||||
| 停止 | 179 | ||||||
| 静音 | 173 | ||||||
| 浏览器 | 172 | ||||||
| 邮件 | 180 | ||||||
| 搜索 | 170 | ||||||
| 收藏 | 171 | ||||||
keycode表出处:水木 http://www.cnblogs.com/hsapphire/archive/2009/12/16/1625642.html
记录JavaScript中使用keyup事件做输入验证(附event.keyCode表)的更多相关文章
- 在javascript中如何取消事件冒泡
如果在javascript中只希望事件发生在它的目标而不是在它的父元素上,即取消它的冒泡事件的发生,该如何做?因为按照javascript发生事件的顺序,它由两个阶段:分别从根元素--父元素--目标元 ...
- JavaScript中常用的事件
.onclick事件 点击事件(onclick并不是js中的方法,onclick只是浏览器提供js的一个dom接口,让js可以操作dom,所以onclick大小写都是没问题的,比如HTML代码就不用区 ...
- JavaScript中冒泡与事件委托
冒泡 事件触发后事件流的三个阶段按顺序依次是: 1.捕获阶段 2.目标阶段 3.冒泡阶段 大盒子包裹小盒子,两个盒子都分别添加点击事件,当点击小盒子,两个盒子的事件都会触发. 事件委托 下级元素委托上 ...
- JavaScript中的方法事件和函数的方法的三种方法
js中的很多事件 而事件相对应的就是方法(函数 )那么今天所说的就是这三种方法 已onclick事件为例 1: 基本方法 <div id="a" onclick= ...
- javascript设计模式实践之策略模式--输入验证
策略模式中的策略就是一种算法或者业务规则,将这些策略作为函数进行封装,并向外提供统一的调用执行. 先定义一个简单的输入表单: <!DOCTYPE html> <html> &l ...
- JavaScript中的ononline事件和onoffline事件
关于这个时间的描述到处都有,但基本上都是说离线在线什么的我一下子还没反应过来.后再在这里看到了一句话:"断开网络再联网试试,就可以看到连线的提示."这才反应过来,原来指的是网络状态 ...
- JavaScript中的定时事件
这两个函数都是在给定的时间之后开始执行的,并不是立即执行. var timeId = window.setTimeout("method()",1000); //定时执行,还可以这 ...
- 记录一下SparkStreaming中因为使用redis做数据验证而导致数据结果不对的问题
业务背景: 需要通过redis判断当前用户是否是新用户.当出现新用户后,会将该用户放入到redis中,以标明该用户已不是新用户啦. 出现问题: 发现入库时,并没有新用户入库,但我看了数据了,确实应该是 ...
- javascript中的scroll事件
window.addEventListener('scroll',function(){ if(document.compatMode == "CSS1Compat") { ale ...
随机推荐
- ecplice中代码使用快捷键无法格式化,使用其他方法将代码格式化的步骤
选中需要进行格式化的代码--->右键--->source--->format,就可以将代码格式化了.
- js和jquery获取span里面的值
JQ和Js获取span标签的内容 html: 1 <span id="content">‘我是span标签的内容’</span> javascript获取: ...
- Java数据结构和算法(三)顺序存储的树结构
Java数据结构和算法(三)顺序存储的树结构 二叉树也可以用数组存储,可以和完全二叉树的节点一一对应. 一.树的遍历 // 二叉树保存在数组中 int[] data; public void preO ...
- Socket-IO 系列(三)基于 NIO 的同步非阻塞式编程
Socket-IO 系列(三)基于 NIO 的同步非阻塞式编程 缓冲区(Buffer) 用于存储数据 通道(Channel) 用于传输数据 多路复用器(Selector) 用于轮询 Channel 状 ...
- activemq.bat 在window7 x64下启动(安装)报错解决方案
在启动 apache-activemq-5.15.2/activemq.bat 时候报错,提示以下信息: wrapper | --> Wrapper Started as Consolewr ...
- 【Web】网站主如何更改网页标签的图标(favicon.ico)
修改web项目的favicon图标,方式有两种:全局方式和局部方式 全局方式: 进入服务器\webapps\ROOT,然后用自己的favicon.ico替换服务器自带的favicon.ico图片 局部 ...
- Android中px, ppi, dpi, dp, dip, sp概念解析
Android中px, ppi, dpi, dp, dip, sp概念解析
- hdu - 1072(dfs剪枝或bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1072 思路:深搜每一个节点,并且进行剪枝,记录每一步上一次的s1,s2:如果之前走过的时间小于这一次, ...
- Django入门与实践-第17章:保护视图(完结)
http://127.0.0.1:8000/boards/1/ #boards/views.py from django.contrib.auth.decorators import login_re ...
- hibernate createQuery和createSQLQuery 查询结果count计算
createQuery 针对hql语句查询 Query query=getSession().createQuery(hql);int result =((Number) query.iterate( ...