js-PC版监听键盘大小写事件
//获取键盘按键事件,可以使用keyup。
//问题:获取到键盘的按下Caps lock键时,不能知道当前状态是大写、还是小写状态。
//解决:
设置一个全局判断大小写状态的 标志:isCapital = -1; //是否大写 -1:无状态、0:小写、1:大写
给window加一个监听键盘事件方便判断大小写状态,
给所有的输入都加上键盘监听事件,监听大小写切换。
如何判断键盘大小写?
首先我们不可能直接从用户按下Caps lock键而去判断用户切换大小写状态,只能从用户输入的每个字去判断。
另外注意 通过组合键按下的大小写.
a-z的keyCode 65-90
拿到keyCode不能判断其是大小写,只能再从光标的位置拿到它的值,然后用charCodeAt去转。
最后判断其是否在是大写。
提示我是用layer弹窗插件。
示例:
//监听大小写。。。。
//必须全局监听
var isCapital = -1; //是否大写 -1:无状态、0:小写、1:大写
jQuery(window).keyup(changeCapsLock);//监听全局
//监听某个input
jQuery('input[name=loginp]', loginForm).on('keyup', function(e){
var lastVal = '';
if (e.keyCode >= 65 && e.keyCode <= 90) {
console.log(e);
lastVal = jQuery(this).val().substr(getCursortPosition.call(this,this)-1, 1).charCodeAt(0);
if ( lastVal == e.keyCode) {
e.shiftKey ? '' : isCapital = 1;
tipsCapsLock.call(this);
}else{
e.shiftKey ? '' : isCapital = 0;
layer.closeAll('tips');
}
}else{
changeCapsLock.call(this, e);
}
});
//是否切换大小写
function changeCapsLock(e){
e.stopPropagation();
if (e.keyCode !== 20) {return;}
switch(isCapital){
case -1:
break;
case 0:
isCapital = 1;
tipsCapsLock.call(this,this);
if (this !== window) tipsCapsLock.call(this);
break;
case 1:
if (this !== window) layer.closeAll('tips');
isCapital = 0;
break;
}
} //提示大小写
function tipsCapsLock(){
layer.tips('大写锁定已打开,可能会使您输入错误的密码。', this);
}
//得到当前输入光标的位置
function getCursortPosition (ctrl) {
var CaretPos = 0; // IE Support
if (document.selection) {
ctrl.focus ();
var Sel = document.selection.createRange ();
Sel.moveStart ('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
CaretPos = ctrl.selectionStart;
return (CaretPos);
}
js-PC版监听键盘大小写事件的更多相关文章
- js及vue监听键盘回车事件
js document.onkeydown = (event) => { var e = event || window.event; if(e && e.keyCode==13 ...
- Pygame制作微信打飞机游戏PC版
使用Pygame制作微信打飞机游戏PC版 转至:http://www.cnblogs.com/dukeleo/p/3339780.html 前一阵子看了一篇文章:青少年如何使用Python开始游戏 ...
- 使用Pygame制作微信打飞机游戏PC版
前一阵子看了一篇文章:青少年如何使用Python开始游戏开发 .看完照葫芦画瓢写了一个,觉得挺好玩儿,相当于简单学了下Pygame库.这篇文章是个12岁小孩儿写的,国外小孩儿真心NB,想我12岁的时候 ...
- 仿PC版微信的练手项目(可实时通讯)
仿PC版微信的DEMO 本项目是由一个仿PC版微信的vue前端项目,和一个使用leancloud进行数据存储的.提供WebSocket的node后端项目构成. 本项目使用的技术栈:vue + vue- ...
- 让PC版网站在移动端原样式显示
一般PC网站在移动端显示效果往往和PC版原样式不同,为了在移动端下还原原PC站样式,可以采用以下方式解决: 1) 去掉页头的: <meta name="viewport" c ...
- 关于js的addEventListener 和一些常用事件
element.addEventListener(<event-name>, <callback>, <use-capture>);document.addEven ...
- LM_ReadImgMode.js PC单页轮播读图模式组件,零依赖!
LM_ReadImgMode.js PC单页轮播读图模式组件,零依赖! github:http://dtdxrk.github.io/LM-ReadImgMode/ TXT 1.全新的2.0版本,脱离 ...
- 基于 HTML + WebGL 结合 23D 的疫情地图实时大屏 PC 版
前言 2019年12月以来,湖北省武汉市陆续发现了多例肺炎病例,现已证实为一种新型冠状病毒感染引起的急性呼吸道传染病并蔓延全国,肺炎疫情牵动人心,人们每天起来第一件事变成了关注疫情进展,期望这场天灾早 ...
- 基于 HTML + WebGL 结合 23D 的疫情地图实时大屏 PC 版【转载】
前言 2019年12月以来,湖北省武汉市陆续发现了多例肺炎病例,现已证实为一种新型冠状病毒感染引起的急性呼吸道传染病并蔓延全国,肺炎疫情牵动人心,人们每天起来第一件事变成了关注疫情进展,期望这场天灾早 ...
随机推荐
- oc--UINavigationController控制器
UINavigationController导航控制器 UINavigationController导航控制器,是多个界面间跳转的重要元素,可以理解为它存储着多个viewController,它的存储 ...
- imx6 gpio irq
/***************************************************************** * gpio irq * * 一直以来都没了解过gpio的irq, ...
- 第一次用golang写个小程序
1.下载go1.6并安装.我是win7系统(会自动添加GOOROOT环境变,自己建一个放go文件的工程目录并添加到环境变量中) 2.下载liteide并解压缩.(liteide查看菜单中也可编辑环境变 ...
- Android开发-动态布局小记
android动态布局相比静态布局,动态布局不用再将xml转变了布局代码,提高了一定的效率,当然可以忽略不记.动态布局主要是比较灵活,可以很快的在代码中直接修改布局,并直接使用控件进行业务逻辑开发.但 ...
- 作业七:团队项目——Alpha版本冲刺阶段009
今日安排:组内成员讨论 今日进度:组内成员讨论分工细节以及可能遇到的问题,并提出解决方案
- HTML 5 <script> 标签
HTML 4.01 与 HTML 5 之间的差异 async 属性是 HTML 5 中的新属性. 在 HTML 5 中,不再支持 HTML 4.01 中的一些属性. 提示和注释 注释:脚本按照如下方式 ...
- CSS中box-sizing属性的理解与部分用法
今天看了一些关于box-sizing的一些资料,在这里整理一下,希望也能对大家有所帮助. box-sizing是CSS的一个属性,很好的解决了盒模型的相关问题.CSS中的盒模型(Box model)分 ...
- 数据类型int、bigint、smallint 和 tinyint范围
bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. int ...
- 使用Xmanager远程连接CentOS6.4图形界面详解(图文)
1.首先安装与下载图形界面GNOMEyum groupinstall "Desktop"yum groupinstall "X Window System"yu ...
- org.springframework.beans.MutablePropertyValues.add
最近在项目中,通过maven引入其他包时,启动报错如下: [ERROR][2016-10-08 14:01:20.716]Context initialization failed[org.sprin ...