JavaScript:按下两个按钮后如何获取警报

JavaScript:按下两个按钮后如何获取警报,javascript,function,onkeydown,Javascript,Function,Onkeydown,我需要创建一个函数来检测函数(reqkeystefunc)的第一个参数(keystet)中指定的onkeydown事件。一旦检测到,它将调用在函数的第二个参数(myFunc)中指定的函数 我下面的当前代码在按下Z或M时显示警报,但我希望警报在两个按钮都按下后显示,而不是只按下一个。另外,我希望能够为keyset参数输入不同的字母,但我不知道如何在函数中定义它 function reqKeysToFunc( keySet, myFunc) { document.onkeydown = fu

我需要创建一个函数来检测函数(
reqkeystefunc
)的第一个参数(
keystet
)中指定的
onkeydown
事件。一旦检测到,它将调用在函数的第二个参数(
myFunc
)中指定的函数

我下面的当前代码在按下Z或M时显示警报,但我希望警报在两个按钮都按下后显示,而不是只按下一个。另外,我希望能够为
keyset
参数输入不同的字母,但我不知道如何在函数中定义它

function reqKeysToFunc( keySet, myFunc) {
    document.onkeydown = function(event) {
        "use strict";
        var myKey = event.key.toUpperCase();
        var keySet = 'ZM';
        if (keySet.search(myKey) > -1 ) {
            document.onkeydown = null;
            myFunc();
        }
    }
}

function tmp() {
    alert('hello');
}

reqKeysToFunc('ZM', tmp);

在单击按钮时声明一个变量并保存计数,然后检查按钮get click和变量的值是否为1,然后显示警报,类似这样的操作应该可以完成。 将按下的键存储在对象中。并检查集合中不同按键的数量是否等于集合中的字母数量

function reqKeysToFunc( keySet, myFunc) {
    var pressedKeys = {};

    document.onkeydown = function(event) {
        "use strict";
        var myKey = event.key.toUpperCase();
        //var keySet = 'ZM';  //remove this line - keySet is defined as an argument
        if (keySet.search(myKey) > -1 ) {
            pressedKeys[myKey] = true;
            document.onkeydown = null;

            if(pressedKeys.entries().filter((key, val) => val).length === keySet.length) {
                myFunc();
            }
        }
    }
}

function tmp() {
    alert('hello');
}

reqKeysToFunc('ZM', tmp);
我希望警报在按下两个按钮后显示,而不是仅按下一个按钮

您可以为要检测的每个密钥使用标志来实现这一点。按下Z键后,
zFlag
变量设置为
true
。按下M时,
mFlag
变量设置为
true
。只有在设置了两个标志后,才会调用
警报
函数

请参见此示例:

var zFlag=false,
mFlag=假;
函数ReqKeyFunc(键集,myFunc){
document.onkeydown=函数(事件){
“严格使用”;
var myKey=event.key.toUpperCase();
var-keySet='ZM';
如果(键集搜索(myKey)>-1){
如果(myKey='Z'){//如果按了Z
zFlag=true;
}else{//如果按下M
mFlag=真;
}
if(zFlag&&mFlag){//如果两个键都按下了
document.onkeydown=null;
myFunc();
}
}
}
}
函数tmp(){
警惕(“你好”);
}
ReqKeyFunc('ZM',tmp);

document.body.focus();//因此,您不必在键入前单击
此示例允许您定义要查找的序列数组。它存储用户在名为currentSequence的全局中键入的部分序列。如果成功键入整个序列,则使用键入的序列调用myFunc

var序列=['ZM','AB'];
var currentSequence=“”;
document.onkeydown=函数(事件){
“严格使用”;
var myKey=event.key.toUpperCase();
//查看当前序列是否有效
var valid=序列。过滤器(函数(el){
返回el.indexOf(currentSequence+myKey)==0;
});
如果(!valid.length){
//当前序列无效,请重新启动
currentSequence=“”;
}否则{
currentSequence+=myKey;
//查看当前序列是否完整
var found=valid.indexOf(currentSequence);
如果(发现>-1){
//用户键入了完整的序列
myFunc(currentSequence);
currentSequence=“”;
}
}
}
函数myFunc(序列){
警报(“您键入的”+序列);
}

键入内容
我已经完成了这项工作,似乎很有效:

function reqKeysToFunc( keySet, myFunc) {
document.onkeydown = function(event) {
    "use strict";
    var myKey = event.key.toUpperCase();

    if (keySet.search(myKey) > -1 ) {
        keySet = keySet.replace(myKey, '');
        if(keySet === '') {
            document.onkeydown = null;
            myFunc();
            }
        }
    }
}

function tmp() {
    alert('hello');
}

reqKeysToFunc('ZM', tmp);

如果Z键或M键按下两次,而不是仅当两个键都按下时,将显示警报。