如何避免 JavaScript 中自动重复的按键事件?

2023-12-02

如果用户按住该键,则会触发多个 keydown 事件。出于可用性原因,我需要使用 keydown,而不是 keyup,但我想避免这种情况。我的相关代码如下:

$(document).keydown(function(e) { 
        var key = 0;


        if (e == null) { key = event.keyCode;}  
        else {  key = e.which;} 


        switch(key) {
            case config.keys.left:                
              goLeft();
              break;
            case config.keys.up:                        
              goUp();
              break;
            case config.keys.right:                     
              goRight();
              break;
            case config.keys.down:                
              goDown();
              break;
            case config.keys.action:              
              select();
              break;
        }     
      });

因此,例如,当用户按住向下键时, goDown() 会被多次触发。即使用户按住按键,我也希望它只触发一次。


Use event.repeat检测事件是否重复。然后,您可以等待“keyup”,然后再允许处理程序第二次执行。

var allowed = true;

$(document).keydown(function(event) { 
  if (event.repeat != undefined) {
    allowed = !event.repeat;
  }
  if (!allowed) return;
  allowed = false;
  //...
});

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

如何避免 JavaScript 中自动重复的按键事件? 的相关文章

随机推荐

  • 如何像矩阵乘法一样将行向量添加到列向量

    我有一个 nx1 向量和一个 1xn 向量 我想以一种特殊的方式添加它们 例如以有效的方式 矢量化 矩阵乘法 Example A 1 2 3 B 4 5 6 A odd add B 1 4 1 5 1 6 2 4 2 5 2 6 3 4 3
  • 命名空间::变量的多重定义,甚至使用 ifndef

    我知道我在这里一定做错了什么 rank h ifndef RANK H define RANK H namespace mmi int chunk void rank int my rank endif rank cpp include r
  • 如何检测 Python 是否作为 64 位应用程序运行? [复制]

    这个问题在这里已经有答案了 我正在对 Windows 注册表进行一些工作 根据 Python 运行为 32 位还是 64 位 某些键值会有所不同 如何检测 Python 是作为 64 位应用程序运行还是作为 32 位应用程序运行 我对检测
  • 在悬停时添加边框时如何防止移动? (透明边框不是解决方案)[重复]

    这个问题在这里已经有答案了 我想在悬停时为 div 添加边框 但是添加边框时 div 稍微有点拉屎 这是一个众所周知的问题 常见的解决方案是添加透明边框 例如 但是 我的 div 中有一张包含一些文本的图像 我希望该图像占据 div 的全宽
  • 正则表达式西班牙语和阿拉伯语单词

    如何编写匹配所有有效的西班牙语和阿拉伯语单词的正则表达式 用我知道的英语来说 它是a zA z 在希伯来语中是 俄语 我使用 JavaScript 范围a zA Z因为英语单词的简单和天真令人难以接受 它省略了所有带有重音符号的字母以及在借
  • 过渡到 vim。存在缩进问题

    我正在从手术中恢复 因此 我正在过渡到 VIM 作为起点 我选择使用 vim sensible 插件作为我的配置的基础 此外 我还安装了 vim rails 和 vim ruby 插件 这些都是通过 Pathogen 加载的 无论出于何种原
  • 序列化 JFrame 并通过网络发送

    我想做的是通过套接字发送 JFrame 问题是在我发送表格并按下按钮查看它之后 我得到以下异常 package ds3 import java io IOException import java io ObjectInputStream
  • Android - 在 UI Fragment 中保留对象

    在我的项目中 我最初使用的是这个方案 活动A UI gt 片段B 非 UI gt 适配器 AsyncTask B保留与setRetainInstance true 并更新A UI A实例化B with getFragmentManager
  • 在 .NET 中按换行符拆分字符串

    我需要在 NET 中将字符串拆分为换行符 我知道拆分字符串的唯一方法是使用Split方法 然而 这不允许我 轻松地 在换行符上拆分 那么最好的方法是什么 要分割字符串 您需要使用采用字符串数组的重载 string lines theText
  • jQuery Mobile 站点中所有页面通用的弹出窗口

    我正在尝试使用 jQuery Mobile 制作一个网站 它由 HTML 文件中的许多页面组成 有些只有一页 有些有多个页面 使用它们的多页功能 该网站将有一些通知弹出窗口 它们在所有页面上看起来都一样 我正在使用他们的弹出窗口新的弹出功能
  • Python-按前两个单词对行进行分组

    我想按文件中的前两个单词对文件进行分组 然后重新排列和打印 我想做 lines file readlines i 0 for line in lines word1 line split 0 word2 line split 1 if wo
  • c - 嵌入式系统中Long Long到char的转换函数

    我正在使用嵌入式系统 我需要实现一种将 long long 转换为 char 的方法 问题是我不能在这个系统中使用 sprintf 来做到这一点 所以我正在寻找替代方法 函数来实现这一点 欢迎提出 LongLongToChar 函数的实现建
  • FindBugs 希望 readObject(...) 为私有序列化,为什么?

    我正在某些代码上运行 findbugs 它说 readObject 方法必须是私有的才能调用序列化 反序列化 为什么 如果公开的话会有什么问题呢 About readObject writeObject 作为私有的 情况如下 如果你的类 B
  • 图像比较 - 旋转、对齐和缩放

    我有以下需求 有一些表格 即空白表格 例如调查中使用的表格 那些没有填充信息的 从现在开始我将称之为图像模板 除了图像模板之外 我还有很多图像 这些图像本质上都是充满信息的图像模板 例如 有一项调查 有两个空白需要填写 这些是图像模板 许多
  • 在 Windows XP 中从数据包中检索标头目标地址的函数

    我有兴趣检索入站数据包发送到的目标地址 例如在 Linux 上你可以使用recvmsg res recvmsg socket msghdr 0 get cmsg CMSG FIRSTHDR msghdr struct in pktinfo
  • Win2D 在 C++/WinRT 中可用吗?

    我需要在我的 cppwinrt 项目中使用 win2D 使用 Win2D 示例文件作为模型 我尝试模仿其设置 放入该项目中的 win2d 包文件 复制自定义构建步骤 但我无法编译它 我记得有人谈论过 Win2D 很快就会添加到标准 cppw
  • 如何在 u32 和 usize 之间进行惯用转换?

    此代码有效并打印 b fn main let s abc let ch s chars nth 1 unwrap println ch 另一方面 此代码会导致类型不匹配错误 fn main let s abc let n u32 1 let
  • 自动保存分割结果 - Matlab 阿拉伯语 OCR

    完整的分割代码 Preprocessing Segmentation Original Code of Segmentation by Soumyadeep Sinha with several modification by Ana Sa
  • SQL Server Compact Edition 3.5 对于简单查询给出“多步操作生成错误”错误

    我通过 Microsoft 的 OLEDB 3 5 SQL CE 驱动程序使用 SQL Server CE 数据库 这是我的连接字符串 Provider Microsoft SQLSERVER CE OLEDB 3 5 Data Sourc
  • 如何避免 JavaScript 中自动重复的按键事件?

    如果用户按住该键 则会触发多个 keydown 事件 出于可用性原因 我需要使用 keydown 而不是 keyup 但我想避免这种情况 我的相关代码如下 document keydown function e var key 0 if e