You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

控制台可运行但JS文件中keypress事件无响应问题求助

解决keypress事件无法触发的问题

以下是几个针对性的解决办法:

  • 替换废弃的keypress事件
    keypress已被标准标记为废弃,现代浏览器对它的兼容性越来越差,换成keydown或keyup能获得更稳定的触发效果:

    document.addEventListener("keydown", function(event){
      makeSound(event.key);
    });
    
  • 确保脚本在DOM就绪后执行
    如果你的JS文件放在<head>标签里,可能会在document还未完全初始化时就执行代码,导致事件绑定失效。可以把脚本移到<body>标签末尾,或者用DOM就绪事件包裹代码:

    document.addEventListener('DOMContentLoaded', function() {
      document.addEventListener("keydown", function(event){
        makeSound(event.key);
      });
    
      function makeSound(key){
        switch (key) {
          case "w":
            var tom1 = new Audio('sounds/tom-1.mp3');
            tom1.play();
            break;
          case "a":
            var tom2 = new Audio('sounds/tom-2.mp3');
            tom2.play();
            break;
          case "d":
            var tom4 = new Audio('sounds/tom-4.mp3');
            tom4.play();
            break;
          case "s":
            var tom3 = new Audio('sounds/tom-3.mp3');
            tom3.play();
            break;
          case "j":
            var snare = new Audio('sounds/snare.mp3');
            snare.play();
            break;
          case "k":
            var crash = new Audio('sounds/crash.mp3');
            crash.play();
            break;
          case "l":
            var kick = new Audio('sounds/kick-bass.mp3');
            kick.play();
            break;
          default:
        }
      }
    });
    
  • 检查页面焦点状态
    页面加载后如果有输入框、按钮等元素默认获取了焦点,按键事件会被这些元素捕获。可以主动让document获取焦点:

    document.addEventListener('DOMContentLoaded', function() {
      document.focus();
      // 绑定事件的代码...
    });
    
  • 验证音频文件路径
    确保sounds/xxx.mp3的相对路径是相对于HTML文件的位置,而非JS文件的位置,避免因路径错误导致音效无法播放。

内容的提问来源于stack exchange,提问作者Nihel Redjel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:40:25