各功能键码快捷键

2024-02-03

我正在编写一个小脚本来捕获按键事件并轻松地在其上绑定函数。但我现在被困住了!

问题是,如果我初始化多个“事件处理程序”,它会覆盖第一次初始化的参数。

几千个字不比几行代码说得更多。所以,这就是我到目前为止所做的:

var keyCodes={a:65,b:66,c:67,d:68,e:69,f:70,g:71,h:72,i:73,j:74,k:75,l:76,m:77,n:78,o:79,p:80,q:81,r:82,s:83,t:84,u:85,v:86,w:87,x:88,y:89,z:90,"0":48,"1":49,"2":50,"3":51,"4":52,"5":53,"6":54,"7":55,"8":56,"9":57,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123,shift:16,ctrl:17,control:17,alt:18,option:18,opt:18,cmd:224,command:224,fn:255,"function":255,backspace:8,"delete":8,enter:13,"return":13,left:37,up:38,right:39,down:40};

var keyCall = function(k, fn, c, e, k2, nk) {
    this.onkeydown = function() {
        nk = k.split(" ");
        c = e ? e.which : event.keyCode;
        if (nk.length > 1) {
            if (keyCodes[nk[0]] === c) {
                k2 = true;
            }
            if (keyCodes[nk[1]] === c && k2 === true) {
                fn();
                k2 = false;
            }
        } else if (keyCodes[nk[0]] === c) {
            fn();
        }
    };
};


keyCall('ctrl a', function() { // overridden by `keyCall('shift a'`
    alert('callback1');
});

keyCall('shift a', function() {
    alert('callback2');
});

我已经将其优化为非常小的字节,如果您认为带注释的版本有用,那么就说出来吧!给有需要的大家,这里有fiddle http://jsfiddle.net/ARTsinn/HLUYt/

Update

pascalfree 已经修复了它!但现在另一个问题又来了……

“占位符”变量k2检查是否按下了第一个键。但现在如果你按下然后松开ctrl然后点击a-key 该函数将被触发。有任何想法吗?


我假设 onKeyPress 事件绑定到某个 html 元素,如下所示:

keyCall.apply( window.body, ['shift a', function() { alert('a') }] );

为了附加其他事件,您可以检查是否已定义事件处理程序并在新函数中调用它:

var keyCall = function(k, fn, c, e, k2, nk) {
    var oldOnkeydown = this.onkeydown; //get old event handler
    this.onkeydown = function() {
        if( typeof oldOnkeydown == "function" ) { oldOnkeydown() } //call in new eventhandler.
        nk = k.split(" ");
        c = e ? e.which : event.keyCode;
        if (nk.length > 1) {
            if (keyCodes[nk[0]] === c) {
                k2 = true;
            }
            if (keyCodes[nk[1]] === c && k2 === true) {
                fn();
                k2 = false;
            }
        } else if (keyCodes[nk[0]] === c) {
            fn();
        }
    };
    //reset k2 onkeyup
    var oldOnkeyup = this.onkeyup;
    this.onkeyup = function() {
      if( typeof oldOnkeyup == "function" ) { oldOnkeyup() }
      k2 = false;
    };
};

我只添加了两行注释。 (+ onkeyup 事件在最后解决评论中的问题)

Source: http://www.webreference.com/programming/javascript/onloads/index.html http://www.webreference.com/programming/javascript/onloads/index.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

各功能键码快捷键 的相关文章

  • 0、-0 和 +0 之间的差异[重复]

    这个问题在这里已经有答案了 我一直不明白为什么 0分别对待0 有趣的事实是0等于 0 gt 0 0 true 那么问题来了 为什么 0 分别对待 https stackoverflow com a 23368135 1420197 than
  • 样式媒体接收器源 (Chromecast)

    目前 我正在开发我的应用程序的 chromecast 集成 目前 您的投射接收器应用程序有 3 个选项 风格媒体接收器 默认媒体接收器 定制媒体接收器 我真的很喜欢媒体接收器的样式 因为以这种方式设计接收器的样式非常容易 然而 有时我真的很
  • Cloud Functions for Firebase - 创建新用户时写入数据库

    我对 Firebase 和 javascript 语言的 Cloud Functions 非常陌生 我试图在每次创建用户写入数据库时 添加一个函数 这是我的代码 const functions require firebase functi
  • Javascript:在 For 循环中创建函数

    最近 我发现自己需要创建一系列函数 这些函数使用 XML 文档中的值 并且我使用 for 循环运行适当的节点 然而 在执行此操作时 我发现数组中的所有函数仅使用过 XML 表的最后一个节点 对应于 for 循环的最后一次运行 以下是展示这一
  • 自定义 OpenLayers 控件

    如何轻松自定义 OpenLayers 地图控件 或者至少 如何最小化控件的高度 谢谢 附言 有 CSS 覆盖吗 您可以对任何 openLayers 控件进行子类化 我刚刚通过对 PanZoomBar panZoomBar js 进行子类化
  • 如何将 ng-repeat 与图像映射区域标签一起使用?

    我正在尝试使用 AngularJS 创建可点击的汽车配置文件 一旦我将区域标签属性移动到 auto parts json 并将它们与 ng repeat 中的适当属性绑定 那么它就无法工作 如何修复它 请在全页预览中测试元素 var app
  • 将变量分配给 document.getElementById().Innerhtml 不起作用

    请参阅下面的代码 var text yuppie kkkoseh watchdog var messageIndex 0 function looptext var MessageElement document getElementByI
  • 如何在nodejs中获取字符串长度(以字节为单位)?

    如何在nodejs中获取字符串长度 以字节为单位 如果我有一个字符串 像这样 那么 str length 将返回 4 但是如何获得该字符串 有多少字节组成 这是一个例子 str console log str str length char
  • 如何滚动到 div 元素底部 Selenium Webdriver

    我有一个用例 其中网页上有一个 div 元素 只要您单击链接 它就会出现一个弹出对话框 它不是实际的弹出窗口 它类似于当您单击链接进行检查时在 Facebook 中打开的对话框 对您的帖子的反应等 我使用 Selenium WebDrive
  • 在 Javascript 中获取不带模 (%) 运算符的余数,占 -/+ 符号

    对于家庭作业 我需要返回 num1 除以 num2 后的余数 而不使用内置模 运算符 我可以使用以下代码让大多数测试通过 但我一直不知道如何解释给定数字的 符号 我需要保留 num1 上的任何一个符号 并且如果 num2 为负数 还返回一个
  • 从jquery获取httpreferrer的正确方法

    命令 document referrer 是使用 Jquery 获取引荐来源网址的正确方法吗 怎么样 document referrer
  • 如何在 ReactJs 中使用 Hooks useState 编写多行状态

    React 16 9 我知道这class component state class JustAnotherCounter extends Component state count 0 相当于使用Hooks useState functi
  • JS:按每个类别的最大值过滤对象数组

    什么是最有效 优雅的方式来实现类似sql的过滤效果 我想过滤它们并只获取某个组中最大值的对象 这是我的代码 它可以工作 但可能不是最好的方法 uniqueValues arr gt new Set arr getMaxTimeOf arr
  • 带有占位符文本的文本框,该文本会逐字符消失

    我正在寻找一种方法来构造带有日期字段占位符文本的文本框 占位符文本将为 xx xx xxxx 并在用户键入时逐个字符消失 留下斜杠 我遇到了以下两个问题 它们似乎解决了使文本立即消失的问题 HTML CSS 制作一个文本框 其中的文本显示为
  • 有没有办法将 Bootstrap 3.0 插件与 jQuery.noConflict() 一起使用?

    目前 我们的页面上加载了 2 个不同版本的 jQuery 1 4 2 和 1 10 1 和 window jQuery 对象当前指向 1 4 2 我们使用版本 1 10 1 的 noConflict 将其设置为 jq1 var jq1 jQ
  • 为什么自动关闭脚本元素不起作用?

    浏览器无法正确识别的原因是什么 只有这一点是公认的 这是否打破了 XHTML 支持的概念 注意 此声明至少对于所有 IE 6 8 beta 2 都是正确的 XHTML 1 规范的非规范性附录 HTML 兼容性指南 指出 3 元素最小化和空元
  • Doctype的实际使用

    虽然我在 w3 org 上浏览了大量有关 Doctype 的信息并了解不同类型的 doctype 过渡型 严格型 框架集 我还是不太清楚在页面上使用Doctype的实际用途是什么 I mean 是为了阻止开发商 在代码中使用某些标签 例如
  • Highcharter 已弃用函数的输出与建议的不同

    我正在用 Josh Kunst 的出色作品制作一个时间序列情节highcharterR 中的库 使用此数据 gt dput t structure c 2 2 267822980 325286564 66697091 239352431 9
  • Angular ui-router:链接不可点击

    我尝试运行 angular ui router 来处理我的视图 但我遇到了问题 以下视图的两个链接不可点击 带有链接标签的角度更改变量 但我无法单击 我有这样的观点 h1 App h1
  • JavaScript随机生成0或1个整数[重复]

    这个问题在这里已经有答案了 当我编写脚本来填充数据库时 我试图生成随机 0 或 1 如果是1 我会将其保存为男性 反之亦然 将其保存为0 在我的 JavaScript 中 Math floor Math random 1 1 我用它来生成

随机推荐

  • 在 OS X 下的 PyCharm 上运行 GAE GCS,运行时错误“没有名为 cloudstorage 的模块”

    我正在尝试将 Google Cloud Storage 功能添加到已经运行且具有重要功能的 Python GAE 应用程序中 我的开发计算机完全在 PyCharm 中工作 该计算机是运行 OS X 10 9 5 的 Mac 我创建了一个新的
  • php foreach echo 打印“Array”作为值

    也许我只是无法理解 php 如何处理数组 我正在尝试使用 foreach 循环打印出一个数组 我能从中得到的似乎只有 数组 这个词 br 这会打印出以下内容 Array 我无法理解为什么会出现这种情况 如果我像上面一样预先定义一个数组 它将
  • Django:“unicode”对象没有属性“tzinfo”。仅生产服务器

    我很困惑 通过我的本地设置 python manage py runserver 一切运行正常 通过我的生产设置 wsgiserver CherryPyWSGIServer 我得到 unicode object has no attribu
  • GoogleCloudMessaging - InstanceID.getInstance(),从客户端注册

    我对 Java 编程和一般编程还很陌生 现在我决定制作自己的应用程序 该应用程序应该利用 Google Cloud Messaging 不知怎的 我成功了 但后来我意识到我使用了方法 String regid gcm register PR
  • 如何修复此分类报告警告?

    我创建了一个多类分类模型 一切都很顺利 验证准确度为 84 但当我打印分类报告时 我收到了此警告 UndefinedMetricWarning Precision and F score are ill defined and being
  • 检测 Android 上的 USB 网络共享

    有没有什么方法可以 以编程方式 在您的活动 应用程序中知道用户已在其手机上启用 USB 网络共享 您还可以使用反射来访问用于设置 USB 网络共享的隐藏功能 这是我的代码 ConnectivityManager cm Connectivit
  • Mutate_if 语法帮助 - 如何在谓词条件下添加函数参数

    寻找一些有关如何使用 dplyr 的 mutate if 语句来检查是否需要将列转换为因子变量的建议 这个函数说明了我正在尝试做的事情 问题是 当我想为函数中的 max value 参数传递一些内容时 正确的语法是什么 不起作用 我尝试更改
  • Android - 无法动态重新创建 Canvas 视图

    我试图显示在上一个屏幕中绘制的画布图像的网格视图 我有一组在第一个屏幕中绘制的不同视图 这些视图会发生变化 这些画布将根据用户的操作重新绘制 我有 5 个心形画布视图 并且我对每颗心使用不同的视图 这意味着我没有使用同一类来绘制五颗心 而是
  • Java中多项式乘以常量

    我在将多项式乘以常数 双精度 时遇到一些问题 当只有一个系数时它会起作用 但当存在多个系数时 它会给出 ArrayIndexOutOfBounds 错误并指向 setCoefficient 方法 有什么帮助吗 谢谢 public class
  • SwiftUI:呈现工作表时防止视图刷新

    我注意到添加时 SwiftUI 完全刷新了视图sheet修饰符 假设我有显示随机数的视图 我希望这个值是独立的 并且不与工作表逻辑相关 每次打开 关闭工作表时不会改变 但是每次提交 取消表格时文本都会发生变化 它应该这样工作吗 我的要点是错
  • 查询至少有 1 个关联,但返回全部

    我创建了这条记录 您可以看到它有 2 个标签 tag1 和 tag2 id d87de1d9 b048 4867 92fb a84dca59c87e name Test Name tags id fa0ca8fd eff4 4e58 8bb
  • 如何获取泛型类型参数?

    Simply public static class MyClass
  • 在 XCode 中启用代码视图的抗锯齿功能

    有没有办法让 XCode 在启用抗锯齿的情况下在编辑器中渲染文本 我在首选项对话框中看不到任何可以做到这一点的内容 XCode 文本已经是抗锯齿的 检查并确保字体大小大于以下指定的大小 系统偏好设置 gt 外观 如果大于 您可以在命令行中尝
  • 如何确保JVM中类只有一个实例?

    我正在开发一种设计模式 我想确保这里只是Java虚拟机中类的一个实例 通过一个点汇集对某些资源的所有请求 但我不知道这是否可能 我只能想出一种方法来计算类的实例并在创建第一个实例后销毁所有实例 这是正确的做法吗 如果没有的话还有其他办法吗
  • 如何在Android TimePicker中设置间隔30分钟的开始时间和结束时间?

    我正在 android 中的 DatePicker 和 TimePicker 工作 我正在从服务器获取开始时间和时间 我可以使用以下方式以编程方式设置最大日期和最小日期这个链接 https stackoverflow com questio
  • 如何防止 contenteditable 输入事件并在 vue 中设置模型值?

    我想在 contenteditable div 上使用 vue 创建简单的所见即所得编辑器 我想将编辑器内容存储到 json 对象中 我想使用状态 模型概念 我将在编辑器模板中执行类似的操作 div div
  • 在 Maven2 中,构建 WAR 和 EAR 以将该 WAR 包含在单个 POM 中的最简单方法是什么?

    情况非常简单 我有一个 Java Web 应用程序 我正在将其转换为使用 Maven 构建 目前 该应用程序使用 Ant 构建到单个 WAR 文件中 然后使用非常简单的 application xml 将其捆绑到 EAR 中 maven w
  • 如何根据布尔属性对对象数组进行排序?

    我在表中列出了用户列表 活跃用户应排列在非活跃用户之上 我正在尝试做这个sort使用洛达什sortBy功能 但不成功 这是如何userArray looks const userArray I need to show users whic
  • 更改 Rails 5 中的默认本地主机端口

    我正在使用 Rails 5 它与默认的 puma 服务器一起使用并监听 localhost 3000 我希望它侦听新端口 例如 192 168 0 0 3000 有人可以帮忙吗 谢谢 Rails 5 自带了 puma 配置在config p
  • 各功能键码快捷键

    我正在编写一个小脚本来捕获按键事件并轻松地在其上绑定函数 但我现在被困住了 问题是 如果我初始化多个 事件处理程序 它会覆盖第一次初始化的参数 几千个字不比几行代码说得更多 所以 这就是我到目前为止所做的 var keyCodes a 65