2017-12-18 122 views
0

我需要制作一个函数,用于检测在函数(reqKeysToFunc)的第一个参数(keyset)中指定的onkeydown事件。一旦检测到,这将调用函数的第二个参数(myFunc)中指定的函数。下面JavaScript:如何在按下两个按钮后得到警报

我当前的代码显示当按下任一ž中号警报,但我想提醒展示后他们两个被按下,而不只是一个。另外,我希望能够为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); 

回答

-3

声明一个变量并保存指望上按一下按钮,然后检查按钮获得点击次数和变量值1,则显示警告

+0

会是什么代码看起来象是什么? –

+0

如果Z或M被按下两次,而不是只有两个按键被按下,才会显示警报。 – freginold

+0

是的,哎呀抱歉,我没有想到这个? –

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

我希望告警显示两个人都被压制,而不只是一个后。

你可以使用你想检测的每个键的标志来做到这一点。当按下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

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

我已经做到了这一点,这似乎已经奏效:

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