在我的程序中,我想在用户输入所需文本时调用警报函数。一切正常,只有我被迫多输入 1 个字符。例如,除了输入 HEALTHY 之外,我还必须再按 1 个键(任意)。这是代码:
let textBlock = document.getElementById("textBlock");
let textPlace = document.getElementById("textPlace");
function keyHandler(e) {
let len = textPlace.value.length;
if (textPlace.value === textBlock.textContent) {
alert("Ты победил!");
}
else if (textPlace.value != textBlock.textContent.slice(0, len)){
e.target.style.backgroundColor = "red";
}
else {
e.target.style.backgroundColor = "white";
}
}
textPlace.addEventListener("keydown", keyHandler);
改为进行
keydown释放密钥的处理。keyup因为否则,事件会触发,但在触发时,文本字段中还没有任何内容。只是处理事件,仅此而已。
事件发生时
'keydown',该字段的内容尚未更改,尚未插入新字符。尝试使用 event'keyup',甚至更好的 event'input'(然后它会起作用,例如,当从缓冲区粘贴而不使用键盘时)。如果您想使用
keydown,请注意它会在有<input>时间处理击键之前触发(顺便说一下,也可以取消此按键,这样<input>根本就不会收到任何信息)。但是您可以自己将最后一个键的字母添加到结果中。
而且我还建议用
alert()更现代的东西(在许多浏览器中存在错误)替换一个在任何地方都可以使用的东西,比如<dialog>.