//获取键盘按键事件,可以使用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版监听键盘大小写事件的更多相关文章

  1. js及vue监听键盘回车事件

    js document.onkeydown = (event) => { var e = event || window.event; if(e && e.keyCode==13 ...

  2. Pygame制作微信打飞机游戏PC版

    使用Pygame制作微信打飞机游戏PC版 转至:http://www.cnblogs.com/dukeleo/p/3339780.html   前一阵子看了一篇文章:青少年如何使用Python开始游戏 ...

  3. 使用Pygame制作微信打飞机游戏PC版

    前一阵子看了一篇文章:青少年如何使用Python开始游戏开发 .看完照葫芦画瓢写了一个,觉得挺好玩儿,相当于简单学了下Pygame库.这篇文章是个12岁小孩儿写的,国外小孩儿真心NB,想我12岁的时候 ...

  4. 仿PC版微信的练手项目(可实时通讯)

    仿PC版微信的DEMO 本项目是由一个仿PC版微信的vue前端项目,和一个使用leancloud进行数据存储的.提供WebSocket的node后端项目构成. 本项目使用的技术栈:vue + vue- ...

  5. 让PC版网站在移动端原样式显示

    一般PC网站在移动端显示效果往往和PC版原样式不同,为了在移动端下还原原PC站样式,可以采用以下方式解决: 1) 去掉页头的: <meta name="viewport" c ...

  6. 关于js的addEventListener 和一些常用事件

    element.addEventListener(<event-name>, <callback>, <use-capture>);document.addEven ...

  7. LM_ReadImgMode.js PC单页轮播读图模式组件,零依赖!

    LM_ReadImgMode.js PC单页轮播读图模式组件,零依赖! github:http://dtdxrk.github.io/LM-ReadImgMode/ TXT 1.全新的2.0版本,脱离 ...

  8. 基于 HTML + WebGL 结合 23D 的疫情地图实时大屏 PC 版

    前言 2019年12月以来,湖北省武汉市陆续发现了多例肺炎病例,现已证实为一种新型冠状病毒感染引起的急性呼吸道传染病并蔓延全国,肺炎疫情牵动人心,人们每天起来第一件事变成了关注疫情进展,期望这场天灾早 ...

  9. 基于 HTML + WebGL 结合 23D 的疫情地图实时大屏 PC 版【转载】

    前言 2019年12月以来,湖北省武汉市陆续发现了多例肺炎病例,现已证实为一种新型冠状病毒感染引起的急性呼吸道传染病并蔓延全国,肺炎疫情牵动人心,人们每天起来第一件事变成了关注疫情进展,期望这场天灾早 ...

随机推荐

  1. 0-1背包问题python解决

    def f(i,j): while i>=0: if i==0 and j>=l[i][0]: return l[i][1] elif i==0 and j<l[i][0]: ret ...

  2. Levenberg-Marquardt算法基础知识

    Levenberg-Marquardt算法基础知识 (2013-01-07 16:56:17) 转载▼   什么是最优化?Levenberg-Marquardt算法是最优化算法中的一种.最优化是寻找使 ...

  3. Android 取源码时 error: could not verify the tag 'v1.12.4'的解决

    原帖地址http://forum.xda-developers.com/showthread.php?p=46100064也没说啥原因 repo init -u git://github.com/Cy ...

  4. 构造函数,const char*与c_str

    /******************************************************************************* * 版权所有: * 模 块 名: * ...

  5. log4j日志-liu

    log4j日志级别: http://michales003.iteye.com/blog/1160605 log4j日志配置详解: http://www.cnblogs.com/ITtangtang/ ...

  6. 对contentoffset的理解

    今天遇到一个问题,在写瀑布流时,竖屏的时候可以正常实现,在手机变成横屏后,总是显示不全. 最终查了两个小时,查到了导致这个的原因,是自己的判断cell是否在当前显示区域的方法写错了. 根本原因是没有很 ...

  7. Spring中的SPEL

    src\dayday\Person.java package dayday;/** * Created by I am master on 2016/11/28. */public class Per ...

  8. js相关参考资料

    [图片等比例适配:]http://www.cnblogs.com/zengxiangzhan/archive/2009/09/12/1565323.html

  9. django常见小问题收集(转)

    1.当我把 DEBUG = True设为False的时候运行 python manage.py runserver 的时候 报错 : CommandError: You must set settin ...

  10. Mysqli封装

    <?php //headerheader('content-type:text/html;charset=UTF-8'); class DB {    //定义属性    private $ho ...