最近代码中有个功能需要用到手动触发键盘事件的功能,咱们的现有库对fireEvent的实现还比较单一,对键盘事件没有作支持,就自己封了一个。但键盘事件的fire在各浏览器下实现不一样,下面分别说明一下:
1. IE下没什么问题,创建事件对象、对对象的keyCode属性赋值,然后再抛出来就行了:
evtObj = document.createEventObject(); evtObj.keyCode=keyCode el.fireEvent( 'on' +evtType, evtObj);
|
2. Firefox 需要通过document.createEvent创建KeyEvents对象,再通过initKeyEvent方法对事件对象初始化
evtObj = document.createEvent( 'KeyEvents' );
evtObj.initKeyEvent( evtType, true , true , window, false , false , false , false , keyCode, 0 );
|
3. Chrome/Safari/Opera
通过document.createEvent创建UIEvents对象,初始化后再在该对象上挂载按键值,Chrome和Opera可以先将keyCode属性delete掉后,再用Object.defineProperty方法重新为它赋值:
delete evtObj.keyCode;<br>Object.defineProperty(evtObj, "keyCode" ,{value:keyCode});
|
但是这里需要注意一点:Safari无法对对象的keyCode属性进行操作,强制覆盖里还会报错,解决方法是将键keyCode转为字符后挂在事件对象的key属性上:
evtObj.key=String.fromCharCode(keyCode); |
通过这种方式绕开safari的坑后,在事件触发时的回调中再对keyCode进行一次适配即可:
var keyCode=evt.keyCode || evt.key.charCodeAt(0);
|
最后,封装好的function大概就是这样:
function fireKeyEvent(el, evtType, keyCode){
var evtObj;
if (document.createEvent){
if ( window.KeyEvent ) {
evtObj = document.createEvent( 'KeyEvents' );
evtObj.initKeyEvent( evtType, true , true , window, false , false , false , false , keyCode, 0 );
} else {
evtObj = document.createEvent( 'UIEvents' );
evtObj.initUIEvent( evtType, true , true , window, 1 );
delete evtObj.keyCode;
if ( typeof evtObj.keyCode === "undefined" ){
Object.defineProperty(evtObj, "keyCode" ,{value:keyCode});
} else {
evtObj.key=String.fromCharCode(keyCode); } } el.dispatchEvent(evtObj); } else if (document.createEventObject){
evtObj = document.createEventObject(); evtObj.keyCode=keyCode; el.fireEvent( 'on' +evtType, evtObj);
} } |
完整事例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <title>fireKeyEvent</title> </head> <body> <input type="text" id="txt1"/> <input type="button" id="btn1" value="fire"/> <script type="text/javascript"> function $(id){ return document.getElementById(id); } function addEvent(el, type, fn){ if(document.addEventListener){ el.addEventListener(type, fn, true); }else if(document.attachEvent){ el.attachEvent("on"+type, fn); }else{ el["on"+type] = fn; } } function fireKeyEvent(el, evtType, keyCode){ var evtObj; if(document.createEvent){ if( window.KeyEvent ) { evtObj = document.createEvent('KeyEvents'); evtObj.initKeyEvent( evtType, true, true, window, false, false, false, false, keyCode, 0 ); } else { evtObj = document.createEvent('UIEvents'); evtObj.initUIEvent( evtType, true, true, window, 1 ); delete evtObj.keyCode; if(typeof evtObj.keyCode === "undefined"){ Object.defineProperty(evtObj,"keyCode",{value:keyCode}); }else{ evtObj.key=String.fromCharCode(keyCode); } } el.dispatchEvent(evtObj); }else if(document.createEventObject){ evtObj = document.createEventObject(); evtObj.keyCode=keyCode el.fireEvent('on'+evtType, evtObj); } } addEvent($("txt1"), "keydown" ,function(e){ var evt=window.event || e; var keyCode=evt.keyCode || evt.key.charCodeAt(0); alert("keyCode:"+keyCode); }) addEvent($("btn1"), "click", function(){ fireKeyEvent($("txt1"), "keydown", 27); }); </script> </body> </html>
相关推荐
chromedriver-win64_116.0.5840.0.zip
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
计算机毕业设计资源包含(项目部署视频+源码+LW+开题报告等等),所有项目经过助教老师跑通,有任何问题可以私信博主解决,可以免费帮部署。
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
瘢痕挛缩护理规定(医院规章制度管理文件).docx
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
html网页制作 行为代码 事件效果 特写脚本代码
chromedriver-win64_116.0.5842.0.zip
长亭网络通信基础详情了解word
资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom124.0.6344.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver124.0.6344.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)
32位alu设计实验logisim
变量名的命名直接影响到程序的易读性,好的变量名应该简洁、易于理解。 一、单字符变量名 数学中通常用x,y来表示坐标,同样的,在命名变量时,可以使用一些具有特定含义的单个字符。这样的变量名兼具有意义和极简两大优点,作为编程人员应熟记。 具体列举如下。 i、j、k:数值(integer(整数))。 s:字符串(string)。 c:字符(char)。 p:指针(pointer)。 a:数组(array)。 x、y、z:坐标。 l:长度(length)。 n:数字、数量(number)。 二、常用变量名 1.计数器和循环: count:用于计数或记录数量的变量。 i、j、k:常用于循环中的迭代变量,尤其在嵌套循环中。 index:常用于循环或数组中的索引。 loop:表示循环的次数或循环控制变量(相当于前面的i) 2.布尔型变量: flag:用于表示某种状态或条件是否满足。 status:表示状态或结果。 isOpen:表示某个对象或功能是否开启。 isValid:表示某个条件是否有效或成立。 isFound:表示是否找到了某个元素或条件。
chromedriver-win64_117.0.5938.35.zip
chromedriver-win64_119.0.6039.0.zip
一、顾客功能点: 注册功能:用户可以注册账号,注册成功后可以登录系统。 登录功能:已注册用户可以登录系统,从而管理自己的信息以及进行洗衣预约等功能的使用。 查看与修改个人信息:用户有个人的主页和个人信息展示,允许用户对自己的信息进行修改。 修改密码:用户可以修改自己的密码。 店铺预约与查看:用户可以查看店铺详情并且预约。 洗衣信息管理:用户预约完毕之后可以对自己的预约信息进行查看,并且支付。 订单信息查看:用户可以查看依旧完成的订单信息和进行中的订单。 二、店家功能点: 店铺信息管理:店家可以对店铺信息进行增删改查。 衣服类型管理:店家可以管理自己可以清洗的衣服类型。 洗衣信息管理:店家可以管理用户的预约订单,进行审核和删除订单。 订单信息管理:店家可以管理订单信息,对订单信息的进度进行管理。 三、管理员功能点: 顾客信息管理:管理员可以对所有顾客进行管理,进行增删改查操作。 店家信息管理:管理员可以管理所有的店家,对店家进行增删改查和审核操作。 店铺信息管理:管理员可以管理所有的店铺信息,对店铺进行删改查以及审核操作。 衣服类型管理:管理员可以管理所有的衣服类型,并且进行删除操作
HID Mouse Classic
主要施工机械实有、完好情况表.docx
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
java论坛管理系统设计(源代码+论文)
chromedriver-win64_116.0.5845.4.zip