各功能键码快捷键

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(使用前将#替换为@)

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

  • 使用 jquery 远程图像属性

    目前我正在尝试获取远程图像宽度 高度 我正在开发一个链接共享模块 就像当你在 Facebook 上粘贴链接时 你可以看到标题 描述和图像 所以我尝试使用 php getimagesize 来获取图像宽度 高度 但速度非常慢 所以我正在考虑使
  • ReferenceError:regeneratorRuntime未定义(但在范围内工作)

    我遇到过这种奇怪的情况 ReferenceError regeneratorRuntime is not defined 我已经设法在一个非常小的设置中重现 与同一问题上的类似问题相比 并且还注意到一些奇怪的行为 具体取决于是否使用范围 以
  • 在 contenteditable div 中选择范围

    我有一个contenteditablediv 和其中的一些段落 这是我的代码 div style border solid 1px black width 300px height 300px div Hello world div div
  • 为什么 iife 在一个简单的例子中不起作用?

    我不明白为什么函数表达式调用不起作用并抛出错误 你能给我解释一下吗 var a function x alert x function a 1 谢谢大家 任务比我想象的要容易得多 这是因为 JS 将 IIFE 解析为函数的参数调用 这样做时
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 如何更改 Google Maps v3 API for Directions 中的开始和结束标记图像

    我使用 DirectionsRender 绘制了一条路线 但我不知道如何用我自己的标记替换通用的 Google 标记 我知道并在正常的谷歌地图情况下使用它 但发现很难用开始和结束的方向标记来做到这一点 如果这是一个愚蠢的问题 感谢您的任何建
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • 如何将函数附加到弹出窗口关闭事件(Twitter Bootstrap)

    我做了一些搜索 但我只能认为我可以将事件附加到导致其关闭的按钮 https stackoverflow com questions 13205103 attach event handler to button in twitter boo
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • 使用 CSS 或 Javascript 填充动画

    我只是想知道是否可以使用 CSS 或 javascript 创建填充动画 基本上我想创建一个填充动画 如下图所示 http i40 tinypic com eit6ia png http i40 tinypic com eit6ia png
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro

随机推荐

  • 在 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