控制台可运行但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
相关产品推荐
相关产品推荐

