2016-05-22 35 views
1

有没有人知道如何检测按下键码“+1输入”和“-1输入”在Javascript中,请。 我想检测一次按键码而不是一次。Javascript按下键码“+1输入”和“-1输入”

但是当我写下面的代码时,没有给出任何效果。

// +1 enter 
$(document).keydown(function(e) { 
    if (e.keyCode == 107 && e.keyCode == 49 && e.keyCode == 13) { 
    window.alert("+1"); 
    } 
}); 

// -1 enter 
$(document).keydown(function(e) { 
    if (e.keyCode == 109 && e.keyCode == 49 && e.keyCode == 13) { 
    window.alert("-1"); 
    } 
}); 

请注意您的专业意见。

+0

你应该使用'||',而不是'&&'。一个单一的keypess如何可以同时使用3个不同的角色? –

+0

我的意思是按下+,1,输入或 - ,1,一个一个输入,但在短时间内 – CKH

+0

您是否打算实现您要查找的内容库(按键序列),还是需要坚持香草JS和jQuery? – jdphenix

回答

0

为了做到这一点,您需要能够跟踪以前的按键。请尝试以下操作:

// These are just used to display the result in the DOM--you can delete this 
 
var $keyCodes = document.getElementById('key-codes'); 
 
var $result = document.getElementById('result'); 
 

 
// Used to keep track of your key presses 
 
var trackKeyCodes = (function() { 
 
    // Keep a private array of key codes to track 
 
    var keyCodes = []; 
 
    // This is the actual function that gets stored in trackKeyCodes 
 
    return function(keyCode) { 
 
    // Only store the last 3 key codes 
 
    if (keyCodes.length === 3) keyCodes.splice(0, 1); 
 
    // Add the next key code 
 
    keyCodes.push(keyCode); 
 
    // This just displays it in the DOM for you to see--you can delete this 
 
    $keyCodes.innerHTML = keyCodes.join(', '); 
 
    return keyCodes; 
 
    }; 
 
})(); 
 
// Used to actually check the key presses 
 
var checkKeyCodes = function(keyCodes, first, second, third) { 
 
    return keyCodes[0] === first && keyCodes[1] === second && keyCodes[2] === third; 
 
}; 
 

 
// +1 enter 
 
$(document).keydown(function(e) { 
 
    var keyCodes = trackKeyCodes(e.keyCode); 
 
    if (checkKeyCodes(keyCodes, 107, 49, 13)) { 
 
     $result.innerHTML = '+ 1'; 
 
    } else if (checkKeyCodes(keyCodes, 109, 49, 13)) { 
 
     $result.innerHTML = '- 1'; 
 
    } else { 
 
     $result.innerHTML = ''; 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p> 
 
KeyCodes: <span id="key-codes">-</span> 
 
</p> 
 
<p> 
 
Result: <span id="result">-</span> 
 
</p>

+0

谢谢。但是代码“window.alert”应该放在代码中哪里?而且你的代码是什么意思? – CKH

0

您可以使用下面的功能:

$(document).keydown((function() { 
    var codes = []; 
    return function(e) { 
     if (e.keyCode == 107 || e.keyCode == 109 || e.keyCode == 49 || e.keyCode == 13) { 
      codes.push(e.keyCode); 
      if (codes.toString().indexOf('107,49,13') >= 0) { 
       alert('+1'); 
       codes.splice(0, codes.length); 
      } else if (codes.toString().indexOf('109,49,13') >= 0) { 
       alert('-1'); 
       codes.splice(0, codes.length); 
      } 
     } else { 
      codes.splice(0, codes.length); 
     } 
    }; 
})()); 

基本上,你只需要找到存储先前按键,然后检查他们的一些方法每次按下一个新键。在这种情况下,它存储在一个IIFE闭包内的变量中。

JSFiddle

+0

但是,您在JSFiddle中的代码不起作用。 – CKH

+0

@CKH是的,你必须点击右下角的框并使用数字键盘的'+'和'-'键。 –

+0

不,当我按下num lock时,按+或 - ,1并逐个输入,则不会提示警告窗口。 – CKH