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 相关文章推荐
javascript 时间比较实现代码
Oct 28 Javascript
js 无提示关闭浏览器页面的代码
Mar 09 Javascript
Jquery事件的连接使用示例
Jun 18 Javascript
JS建造者模式基本用法实例分析
Jun 30 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
Dec 13 Javascript
jQuery基于muipicker实现仿ios时间选择
Feb 22 Javascript
DIV+CSS+jQ实现省市联动可扩展
Jun 22 Javascript
JavaScript展开操作符(Spread operator)详解
Jul 20 Javascript
解决layui表格的表头不滚动的问题
Sep 04 Javascript
jquery 遍历hash操作示例【基于ajax交互】
Oct 12 jQuery
浅谈vue中document.getElementById()拿到的是原值的问题
Jul 26 Javascript
使用Vant完成Dialog弹框案例
Nov 11 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
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
整理Python最基本的操作字典的方法
2015/04/24 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
世界上最大的二手相机店:KEN
2017/05/17 全球购物
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
this关键字的含义
2015/04/08 面试题
shell程序中如何注释
2012/02/17 面试题
汽车工程专业应届生求职信
2013/10/19 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
2015年企业新年寄语
2014/12/08 职场文书
雷锋的故事观后感
2015/06/10 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android