英文:
how to detect a Key Sequence in Javascript
问题
我正在编写一个用户脚本,每次执行快捷键序列 [ctrl + enter] 时在论坛中发布帖子,但我编写的函数将两个按键按独立事件执行,而不是单一序列。
我检查了相关的问题,但没有一个真正解释如何配置函数来处理这个序列。
这是我编写的代码:
let boutton_toast = document.querySelector('.btn-poster-msg');
function toast(e){
if (e.ctrlKey && e.key == "Enter"){
boutton_toast.click();
}
}
document.addEventListener("keydown", toast)
我觉得答案可能非常明显,但我猜不出来。
编辑:
我使用了fordat的方法,它起作用了,这是最终的代码:
let button_toast = document.querySelector('.btn-poster-msg');
let pressedKeys = [];
function bothKeysPressed() {
if (pressedKeys.includes('Enter') && pressedKeys.includes('Control')) {
button_toast.click();
}
}
document.addEventListener('keydown', () => {
pressedKeys.push(event.key)
bothKeysPressed();
})
document.addEventListener('keyup', () => {
pressedKeys = pressedKeys.filter(key => key !== event.key)
})
英文:
i am writing an userscript that post in a forum each time a shortcut sequence is executed [ ctrl + enter ], but the function that i wrote excecutes both keydowns as separate events, and not a single sequence.
i checked the related questions, but none of them really exlained how to configure the function to handle the sequence.
this is the code that i wrote :
let boutton_toast = document.querySelector('.btn-poster-msg');
function toast(e){
if (e.ctrlKey && e.key=="Enter"){
boutton_toast.click();
}
}
document.addEventListener("keydown", toast)
i feel like the answer is really obvious but i can't guess it.
edit :
i used fordat's method and it worked, here's the final code :
let button_toast = document.querySelector('.btn-poster-msg');
let pressedKeys = [];
function bothKeysPressed() {
if (pressedKeys.includes('Enter') && pressedKeys.includes('Control')) {
button_toast.click();
}
}
document.addEventListener('keydown', () => {
pressedKeys.push(event.key)
bothKeysPressed();
})
document.addEventListener('keyup', () => {
pressedKeys = pressedKeys.filter(key => key !== event.key)
})
答案1
得分: 0
你可以尝试创建一个列表(或任何数据结构),用于存储变量,类似这样:
pressedKeys = [];
function bothKeysPressed() {
if (pressedKeys.includes('Enter') && pressedKeys.includes('Control')) {
console.log("Enter and Control are pressed!");
}
}
document.addEventListener('keydown', () => {
pressedKeys.push(event.key)
bothKeysPressed();
})
document.addEventListener('keyup', () => {
pressedKeys = pressedKeys.filter(key => key !== event.key)
})
然后在你的 "keydown" 监听器中添加一个额外的函数,用于检查你需要的这两个按键。
英文:
You could try creating a list (or any data structure really) that stores the variables, something like this:
pressedKeys = [];
function bothKeysPressed() {
if (pressedKeys.includes('Enter') && pressedKeys.includes('Control')) {
console.log("Enter and Control are pressed!");
}
}
document.addEventListener('keydown', () => {
pressedKeys.push(event.key)
bothKeysPressed();
})
document.addEventListener('keyup', () => {
pressedKeys = pressedKeys.filter(key => key !== event.key)
})
Then just include an additional function in your "keydown" listener that checks for the two keys you need.
答案2
得分: 0
我不确定我明白。
这个肯定有效:
let div = document.querySelector('.test');
let counter = document.querySelector('#counter');
var i=0;
function toast(e){
if (!e.repeat && e.ctrlKey && e.key=="Enter"){ // check for e.repeat otherwise if user holds down both keys it calls the function repeatedly
//console.log(e)
let randomColor = '#' + Math.floor(Math.random()*16777215).toString(16);
div.style.backgroundColor=randomColor;
i+=1;
counter.innerText=i;
}
}
document.addEventListener("keydown", toast);
<div style="width: 10em; height: 4em; background-color: lightblue" class="test"></div>
<div id="counter">0</div>
你的附加代码缺少一个闭合的 "}"。
请附上一个最小化可重现的示例。
英文:
I'm not sure I follow.
this certainly works:
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
let div = document.querySelector('.test');
let counter = document.querySelector('#counter');
var i=0;
function toast(e){
if (!e.repeat && e.ctrlKey && e.key=="Enter"){ // check for e.repeat otherwise if user holds down both keys it calls the function repeatedly
//console.log(e)
let randomColor = '#' + Math.floor(Math.random()*16777215).toString(16);
div.style.backgroundColor=randomColor;
i+=1;
counter.innerText=i;
}
}
document.addEventListener("keydown", toast);
<!-- language: lang-html -->
<div style="width: 10em; height: 4em; background-color: lightblue" class="test"></div>
<div id="counter">0<div>
<!-- end snippet -->
You're missing a closing "}" in your attached code.
Please attach a minimal reproducible example.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论