我正在使用虚拟键盘和表单输入部分来创建一个Hangman游戏,用户可以在其中输入整个单词。
我能够在文档中添加“ keydown”事件侦听器,但是我不希望在输入字段中键入内容时触发“ keydown”事件。
这是我添加事件监听器的方式。
document.addEventListener('keydown', handleKeyDown);
这是表格输入。
<form onSubmit={e => onSubmit(e)}>
<div className="input-group">
<input
type="text"
className="form-control"
name="letter"
placeholder="Guess the word"
value={formWord}
onChange={e => setFormWord(e.target.value.toUpperCase())}
disabled={disabled}
/>
<div className="input-group-append">
<button
className="btn text-white"
type="submit"
disabled={disabled}
>
<i className="far fa-arrow-alt-circle-right" /> Go!
</button>
</div>
</div>
</form>
我已经尝试过使用document.getElementsByTagName[0].removeEventListener('keydown', handleKeyDown)
,但这是行不通的。我假设这是因为事件侦听器已添加到实际文档中,而不是元素中。
请帮助!
答案 0 :(得分:1)
在handleKeyDown
内,仅在event.target
与输入字段不匹配的情况下执行函数的主体,例如:
const handleKeyDown = (event) => {
if (event.target.matches('[name="letter"]')) {
return;
}
// rest of function body
};