JS监听组合按键思路及实现过程


Posted in Javascript onApril 17, 2020

前言

我们经常用到组合键,例如alt+f4,crtl+enter。在开发中也会有这种需求。

组合键类型

单独组合,二键组合,三键组合

思路

1、获取键盘上的按键

2、阻止浏览器上的默认行为

3、执行自定义的js函数

代码例子

document.onkeydown = function(e) {
      var keyCode = e.keyCode || e.which || e.charCode;
      var altKey = e.altKey ;
      if(altKey && keyCode == 112) {
        alert("组合键成功")
      }
      e.preventDefault();
      return false;
    }

解刨

e.keyCode || e.which || e.charCode

谷歌浏览器对event.keyCode,event.charCode和event.which都兼容。

火狐浏览器对event.keyCode部分键值有效,如上下左右键(37,38,39,40),enter键(13),PgUp(33),PgDn(34)等部分有效,对数字键,字母键无效。

event.which也是部分键值有效,如字母键,数字键,enter键,Backspace键等有效,对上下左右键,PgUp(33),PgDn(34)键无效。

event.charCode也是对部分键值有效,如字母键,数字键,,Backspace键等有效,对enter键,上下左右键,PgUp(33),PgDn(34)键无效。

ie浏览器中,IE8及以下浏览器对event.charCode无效,event.keyCode和event.which对大部分键值能获得,但是有少部分也不能获得。

所以该写法为兼容写法。

e.altKey,e.shiftKey,e.ctrlKey,e.metaKey

用来监听键盘上的alt,shift,ctrl,meta键。当按下这些键的时候,值会变为true。

e.preventDefault()

阻止默认事件,在W3C标准和IE下,处理方式不太一致。分别是执行e.preventDefault()方法和将e.returnValue = false属性。当然如果你使用的jquery等类库的话,只需要写一个e.preventDefault()就可以了,它帮你做到了兼容。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 跨域和ajax 跨域问题小结
Jul 01 Javascript
jquery 表单进行客户端验证demo
Aug 24 Javascript
ExtJS Grid使用SimpleStore、多选框的方法
Nov 20 Javascript
让table变成exls的示例代码
Mar 24 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
Oct 06 Javascript
简单谈谈原生js的math对象
Jun 27 Javascript
js实现图片懒加载效果
Jul 17 Javascript
快速对接payjq的个人微信支付接口过程解析
Aug 15 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
Sep 18 Javascript
JS中的模糊查询功能
Dec 08 Javascript
6种JavaScript继承方式及优缺点(小结)
Feb 06 Javascript
vue项目配置使用flow类型检查的步骤
Mar 18 Javascript
javascript canvas检测小球碰撞
Apr 17 #Javascript
Vue实现浏览器打印功能的代码
Apr 17 #Javascript
基于JavaScript获取url参数2种方法
Apr 17 #Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
Apr 17 #Javascript
vue fetch中的.then()的正确使用方法
Apr 17 #Javascript
如何基于filter实现网站整体变灰功能
Apr 17 #Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
Apr 17 #Javascript
You might like
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
Python饼状图的绘制实例
2019/01/15 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
python读写csv文件实例代码
2019/07/05 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
办公室文秘岗位职责
2013/11/15 职场文书
医学专业五年以上个人求职信
2013/12/03 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
校园开放日新闻稿
2015/07/17 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
详解Oracle块修改跟踪功能
2021/11/07 Oracle
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android