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

Wordle克隆开发:如何用Keycode数组在keyup事件中过滤合法输入

问题分析与解决方案

你的问题出在**in操作符的使用方式**上:in用于检查对象的属性是否存在,对于数组来说,它检查的是数组的索引(比如0、1、2...),而不是数组里的元素值。所以当你按Q键(keyCode=81)时,81 in key_codes实际是在问“这个数组有没有索引为81的元素”,显然你的数组长度远小于81,所以条件永远不成立。

修复代码

把in换成数组的includes()方法,它专门用来检查数组是否包含某个元素:

// Keyboard
// Listen for key being released
let key_codes = [81,87,69,82,84,89,85,73,79,80,
                  65,83,68,70,71,72,74,75,76,
                  13,90,88,67,86,66,78,77,8];
document.addEventListener('keyup', (e) => {
    if (key_codes.includes(e.keyCode)) {
        console.log(e.keyCode);
    }
});

更优方案:避免使用已废弃的keyCode

keyCode是已被标准废弃的属性,推荐使用更直观的e.key或e.code。比如直接检查字母键和功能键(回车、退格):

// 定义允许的按键(字母不区分大小写,加上回车、退格)
const allowedKeys = ['q','w','e','r','t','y','u','i','o','p',
                     'a','s','d','f','g','h','j','k','l',
                     'enter','z','x','c','v','b','n','m','backspace'];

document.addEventListener('keyup', (e) => {
    const pressedKey = e.key.toLowerCase();
    if (allowedKeys.includes(pressedKey)) {
        console.log(pressedKey);
    }
});

这样代码可读性更强,也不用记忆繁琐的keyCode数值。

内容的提问来源于stack exchange,提问作者auto-noah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:02:39