Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript键序列重定向函数_Javascript - Fatal编程技术网

Javascript键序列重定向函数

Javascript键序列重定向函数,javascript,Javascript,我试着做一个函数,如果按下一系列特定的键,就会产生一个重定向函数。我只知道如何处理一个字符,但不知道如何在一系列字符之后重定向。到目前为止,代码如下: document.onkeydown= function(key){ reactKey(key); } function reactKey(evt) { if (evt.keyCode == 73) { if (evt.keyCode == 76) { window.location = "http://www

我试着做一个函数,如果按下一系列特定的键,就会产生一个重定向函数。我只知道如何处理一个字符,但不知道如何在一系列字符之后重定向。到目前为止,代码如下:

document.onkeydown= function(key){ reactKey(key); }

function reactKey(evt) {
   if (evt.keyCode == 73) {
      if (evt.keyCode == 76) {
        window.location = "http://www.google.com";
      }
   }
}

  });

}
$(document).ready(main);
新代码:

document.onkeydown=functionkey{reactKeykey;}

function reactKey(evt) {
    if(evt.keyCode== 73) {
    string key1 = 73;
    }{
    if(evt.keyCode== 76) {
    string key2 = 76;
    }{
    if(key1 === 73 && key2 === 76) {
      window.location = "http://www.google.com";
      }
   }
}
}
$(document).ready(main);

在每个键事件上,将当前键代码或键字符添加到字符串或数组中。测试字符串/数组的末尾是否有所需的输入序列。要么将字符串/序列截断到某个限制,要么在超时时清除它,这样它就不会失控。

正如@Amadan所写的,您必须在数组中存储最后两个键的笔划,并将其与所需的序列进行比较。此外,@Boris Ivanov暗示说,最好检查一下按键之间的间隔

以下是实施:

var INTERVAL = 500; // max. interval between two last key strokes
var aKeys = []; // two last key strokes
var laststroke = 0; // timestamp of last key stroke
document.onkeydown = function(event){
    var t = (new Date()).getTime(); // current timestamp
    aKeys.push(event.keyCode);
    aKeys = aKeys.slice(0,2); // truncate aKeys array to 2 elements
    // compare aKeys with needed sequence and check interval between key strokes
    if (aKeys.join(',') == '73,76' && t - laststroke < INTERVAL) {
        window.location = "http://www.google.com";
    }
    laststroke = t;
}

不能在一个事件处理程序中同时执行两个测试。您需要测试一次,存储某种标志,然后再次测试第二个键。对于较长的序列,您可以考虑存储最后一个X键的数组,然后,在每个按键上,将数组与想要触发重定向的数组进行比较。序列应该有多快?在考虑它们序列的媒体之间,超时是什么?不确定如何存储一个标志。我更新了代码,但不起作用@BorisIvanov时间对我来说无关紧要。请改用Date.now。如果有嵌入空格,如果我添加了此选项,它还会工作吗?:函数removeSpacesaKeysaKeys不能包含空格,因为它的元素是数字