JavaScript:如何在按下两个按钮后发出警报

问题描述 投票:0回答:5

我需要创建一个函数来检测在函数的第一个参数(onkeydown)中指定的keyset事件(reqKeysToFunc)。一旦检测到,这将调用函数的第二个参数(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);
javascript function onkeydown
5个回答
1
投票

此示例允许您定义要查找的序列数组。它存储用户在名为currentSequence的全局中键入的部分序列。如果成功输入整个序列,则使用键入的序列调用myFunc。

var sequences = ['ZM', 'AB'];
var currentSequence = "";

document.onkeydown = function(event) {
  "use strict";
  var myKey = event.key.toUpperCase();
  // see if the current sequence is valid
  var valid = sequences.filter(function (el) {
    return el.indexOf(currentSequence + myKey) === 0;
  });
  if (!valid.length) {
    // current sequence is not valid, start over
    currentSequence = "";
  } else {
    currentSequence += myKey;
    // see if the current sequence is complete
    var found = valid.indexOf(currentSequence);
    if (found > -1) {
      // user typed a complete sequence
      myFunc(currentSequence);
      currentSequence = "";
    }
  }
}

function myFunc(sequence) {
  alert("You typed " + sequence);
}
Type stuff

0
投票

像这样的东西应该做的工作。您将按下的键存储在对象中。并检查来自set的不同按键的数量是否等于set中的字母数。

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);

0
投票

我做过这个似乎有效的方法:

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);

0
投票

我希望在按下它们之后显示警报,而不仅仅是一个。

您可以使用要检测的每个键的标志来执行此操作。当按下Z时,zFlag变量设置为true。当按下M时,mFlag变量设置为true。只有设置了两个标志才会调用alert函数。

看这个例子:

var zFlag = false,
  mFlag = false;

function reqKeysToFunc(keySet, myFunc) {
  document.onkeydown = function(event) {
    "use strict";
    var myKey = event.key.toUpperCase();
    var keySet = 'ZM';
    if (keySet.search(myKey) > -1) {
      if (myKey == 'Z') { // if Z was pressed
        zFlag = true;
      } else { // if M was pressed
        mFlag = true;
      }
      if (zFlag && mFlag) { // if both keys have been pressed
        document.onkeydown = null;
        myFunc();
      }
    }
  }
}

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

reqKeysToFunc('ZM', tmp);
document.body.focus(); // so you don't have to click before typing

此外,我希望能够为键集参数添加不同的字母,但我不知道如何在函数中定义它。

您有动态定义键集的基础:将其作为参数传递给reqKeysToFunc()。您只需要删除函数内部的静态var keyset声明,创建一个数组来存储哪些键已被按下,哪些键没有,然后检查按下的每个键。

请参阅此解决方案(将ZMD作为键集传入):

var zFlag = false,
  mFlag = false;

function reqKeysToFunc(keySet, myFunc) {
  var keySetArray = keySet.split(''); // get an array of keys
  document.onkeydown = function(event) {
    "use strict";
    var myKey = event.key.toUpperCase();
    if (keySetArray.indexOf(myKey) > -1) {
      keySetArray.splice(keySetArray.indexOf(myKey), 1); // remove the pressed key from the array
      if (!keySetArray.length) { // if all keys have been pressed
        document.onkeydown = null;
        myFunc();
      }
    }
  }
}

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

reqKeysToFunc('ZMD', tmp);
document.body.focus(); // so you don't have to click before typing

-3
投票

在按钮单击时声明变量并保存计数,然后检查按钮是否获得单击,变量是否为值1然后显示警报

© www.soinside.com 2019 - 2024. All rights reserved.