javascript - 当输入处于焦点时阻止 evenListener
问题描述
我在脚本中设置了一些键绑定,但是当我的注意力集中在输入字段上时,我不希望它们触发。我已经尝试过 removeEventListener() 但无法完全按照我想要的方式工作。
document.addEventListener("keydown", (e) => {
if (e.code == "Enter") {
e.preventDefault();
toggleHiddenElements();
}
else if (e.code == "KeyA") {
toggleScene("vorspann");
}
else if (e.code == "KeyE") {
toggleScene("abspann");
}
else if (e.code == "KeyL") {
loadSetup();
}
else if (e.code == "KeyR") {
resetUI();
}
});
这是输入字段之一,例如:
<input type="text" id="vorspann-thema" placeholder="Enter a title">
最简单的解决方案是使用通常不需要的绑定,例如 F 键,但遗憾的是它们必须是 A、E、L、R 和 Enter。
以下建议无效:
var speakerfocus = false;
function getfocus(e) {
speakerfocus = true;
console.log(speakerfocus);
}
document.getElementById("speakers-schmal").addEventListener("click", getfocus);
document.addEventListener('click', removefocus);
function removefocus(e) {
if (e.target != document.getElementById("bauchbinde-schmal")) {
speakerfocus = false;
console.log(speakerfocus);
return;
}
};
解决方案
使用一个布尔标志来确定输入是否在焦点上。为输入添加点击事件监听器,如果标志为真,则将其更改为假,否则将其更改为真。然后你可以在你的键绑定中使用 if 语句。
let focus = false;
document.getElementById('vorspann-thema').addEventListener('click', () => {
focus = true;
});
document.addEventListener('click', (e) => {
if (e.target != document.getElementById('vorspann-thema') focus = false;
});
推荐阅读
- android - onCompeletionListener() 不是每次都调用并且随机播放和重复不能正常工作
- javascript - 浏览器控制台中的 Jest 单元测试模块导出错误
- c - 如果两个任务尝试同时访问结构的不同部分(在 c 中)会发生什么?
- nginx - nginx 将 http 重定向到 https 域
- c# - 如何在c#中对元素进行排名,尤其是当它有重复项时
- c# - 即使有明确的等待,Selenium 也会抛出 NoSuchElementException
- spring - Gradle Spring mvc 验证数据类递归 Kotlin
- python - Eventlet heroku flasksocketio 应用程序不工作
- c# - EF Core 播种用户数据在用户表警告中获得重复角色
- c# - 使用 dotnet 和 MsBuild 构建 .NET 应用程序有什么区别?