Javascript 键码冲突:“右箭头”和“单引号”

2023-12-13

以下脚本执行其应该执行的操作,即它对“向左箭头”和“向右箭头”键做出反应。但是,由于键码冲突,它也会对单引号做出反应。它使得无法将该字符输入到输入字段中。对此可以采取什么措施吗?

<script type="text/javascript">
  onload = function(){
    document.onkeypress=function(e){
      if(window.event) e=window.event;
      var keycode=(e.keyCode)?e.keyCode:e.which;

      switch(keycode){
        case 37: window.location.href='set.jsp?index=5';
          break;
        case 39: window.location.href='set.jsp?index=7';
          break;
      }
    }
  }
</script>

当用户按下单引号键时,e.keyCode财产为零,并且e.which属性是 39。 正在执行String.fromCharCode(39)返回单引号。

你想要的keyCode如果该属性位于事件对象中:

var keycode = "keyCode" in e ? e.keyCode : e.which;

这样,当事件对象中存在该属性时,并且当which财产也存在。

document.onkeydown = function(event) {
    event = event || window.event;

    var keyCode = "keyCode" in event ? event.keyCode : event.which;

    switch (keyCode) {
        case 37: console.log("37 was pressed", event); break;
        case 39: console.log("39 was pressed", event); break;
    }
};

编辑#1:其他评论者和答案是正确的。我忘记了你不应该检测控制键keypress事件。变成onkeydown.

跨浏览器工作的完整 HTML 示例:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>Key Codes Test</title>
</head>
<body>
    <script type="text/javascript">
        document.onkeydown = function(event) {
            event = event || window.event;

            var keyCode = "keyCode" in event ? event.keyCode : event.which;

            switch (keyCode) {
                case 37: console.log("37 was pressed", event); break;
                case 39: console.log("39 was pressed", event); break;
            }
        };
    </script>
    <input type="text" size="30">
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 键码冲突:“右箭头”和“单引号” 的相关文章

随机推荐

  • docx4j 查找和替换

    我有带有一些占位符的 docx 文档 现在我应该用其他内容替换它们并保存新的 docx 文档 我开始于docx4j并找到了这个方法 public static List getAllElementFromObject Object obj
  • 通过转换器绑定每个按钮,使背景颜色变亮

    我想在单击时使按钮背景变亮 所以我做了以下事情
  • 如何修复错误 E0277:不满足特征绑定 `[usize]: std::marker::Sized` ?

    我正在尝试将数组传递给函数 fn my func xs usize gt usize 0 fn main let arr 329 457 657 let res my func inp 我收到错误 error E0277 the trait
  • 如何从 C# 以编程方式控制 Win7 中的麦克风和麦克风增强设置?

    Windows 7 有一些新的音频设置 我无法从我的 C 应用程序中控制这些设置 具体来说 在输入 麦克风 属性中 有一个包含麦克风和麦克风增强滑块的 级别 选项卡 以及一个麦克风静音切换 复选框 我需要以编程方式确保麦克风没有静音 但尚未
  • Grails + GORM:GORM 中默认的 equals() 实现是什么?

    当我做domainObj1 domainObj2Grails 中的对象是按 ID 进行比较的吗 如果不是 它们如何比较 首先 您需要了解 GORM Grails 并没有做任何特别的事情equals 除非你自己实现equals 在您的域类上
  • 摇动动画(3d版)

    我想在错误上使用此动画 如图所示here 如何在wpf中实现这一点 我感觉这应该是多个转换的组合 组合 但是具体是哪些转换以及如何转换 这是一个初学者 mcve或称之为 我的尝试 它很丑陋 甚至与我想要的不接近
  • 将操作添加到操作栏面板

    我想向操作栏添加一个操作 但它在我的操作栏中显示为下拉列表 如何向操作栏添加按钮 我的代码是 menu menu
  • 为什么Python中的像素值会自动变化?

    我正在 VideoCapture 的帮助下从视频中提取帧 提取第一帧 借助 PIL 将帧转换为图像 打印位置 1 1 处的前一个像素值 打印新创建图像的位置 1 1 处的像素值 谁能解释为什么 提取帧的函数 import cv2 from
  • 使用 Dapper,如何将 sql 类型的值作为参数传递?

    我正在尝试使用 dapper 并将我在此处使用 DDL 定义的整数列表传递给存储过程 CREATE TYPE dbo BrandIDSet AS TABLE BrandID INT NULL 我创建了这个存储过程 CREATE PROCED
  • 如何使用 jQuery 从多个事件触发相同的函数?

    有没有办法拥有keyup keypress blur and change事件在一行中调用相同的函数 还是我必须单独执行它们 我遇到的问题是 我需要通过数据库查找来验证一些数据 并希望确保在任何情况下都不会错过验证 无论是键入还是粘贴到框中
  • 在 Python 中使用 SHA256withRSA 数字签名验证失败

    我正在尝试使用离线 aadhaar KYC 验证应用程序的给定证书文件来验证数字签名 该说明在验证文档中给出 读取整个 XML 并将 s xxxx 标记从中分离出来 使用基于 SHA256withRSA 的哈希和加密技术的签名验证算法 s
  • 将二进制文件添加到 Visual Studio 中的资源

    请这听起来可能是新手 但我就是无法让它工作 因为 在 Visual Studio 2012 中将文件 例如 file exe 添加到资源中的步骤是什么 以便我可以使用以下命令找到资源FindResource hInstance MAKEIN
  • 如何在 Json 控制器中渲染部分视图

    如何渲染要在控制器中的 JsonResult 中使用的部分视图 return Json new Html this RenderPartialView EditMovie updatedMovie Message message JsonR
  • 与 glfw3 链接时发生错误[重复]

    这个问题在这里已经有答案了 我最近一直在尝试编译C 代码并且不依赖IDE 我决定使用编辑器和命令行来编写和编译代码 问题是我想制作一个 glfw 应用程序 但是当我链接 glfw3 lib 和 opengl32 lib 时出现错误 a ex
  • 他们添加的 git 重命名冲突 - git 将重命名目录中的相同文件识别为新文件

    我已经重命名了一个目录并将其合并到我的主分支中 当合并另一个分支时 git 将重命名的目录中的相同文件识别为新文件 当合并到另一个分支时 我得到该目录中相同文件 由他们添加 的合并冲突 added by them theirDir same
  • 如何在每个测试的基础上更改模拟实现?

    我想通过扩展默认模拟的行为并在下一个测试执行时将其恢复到原始实现来更改每个测试基础上模拟依赖项的实现 更简单地说 这就是我想要实现的目标 模拟依赖 在单个测试中更改 扩展模拟实现 执行下一个测试时恢复到原始模拟 我目前正在使用 Jest v
  • 从源安装 R 包,无需更改 PATH (Windows)

    我正在尝试安装包rpart对于 Windows 7 上的 R 2 14 0 但我收到警告 包 rpart 不可用 对于 R 版本 2 14 0 所以我从包页面下载 tar gz 文件 我已经安装了 Rtools 但禁用了所有选项 包括更改
  • 什么是最好/非常好的元数据阅读器库?

    现在 我对从 MP3 文件 ID3 标签 读取数据特别感兴趣 但它能做的越多 例如图像中的 EXIF 就越好 而且不会影响 ID3 标签的读取能力 我有兴趣制作一个脚本来遍历我的媒体 现在是我的音乐文件 并确保文件名和目录路径与文件的元数据
  • F# 中什么是柯里化? [复制]

    这个问题已经存在了 可能的重复 函数式编程 柯里化 我正在这里阅读免费的 F Wikibook http en wikibooks org wiki F Sharp Programming 有一节解释了什么是偏函数 它说使用 F 你可以部分
  • Javascript 键码冲突:“右箭头”和“单引号”

    以下脚本执行其应该执行的操作 即它对 向左箭头 和 向右箭头 键做出反应 但是 由于键码冲突 它也会对单引号做出反应 它使得无法将该字符输入到输入字段中 对此可以采取什么措施吗