2016-05-22 10 views
1

Weiß jemand, wie man den Tastencode "+1 eingeben" und "-1 eingeben" in Javascript erkennt, bitte. Ich möchte erkennen, wenn man Tastencodes ONE BY ONE anstatt auf einmal drückt.Javascript drücken Tastencode "+1 eingeben" und "-1 eingeben"

Aber wenn ich die folgenden Codes schrieb, wurde kein Effekt gegeben.

// +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"); 
    } 
}); 

Für Ihre professionellen Kommentare, bitte.

+0

Sie sollten '||', nicht '&&' verwenden. Wie kann eine einzelne Keypess gleichzeitig 3 verschiedene Charaktere sein? –

+0

Ich meine Drücken von +, 1, Enter oder -, 1, geben Sie nacheinander, aber in kurzer Zeit – CKH

+0

Sind Sie offen für Bibliotheken, die das implementieren, was Sie suchen (Key-Sequenzen), oder müssen Sie auf Vanille JS bleiben und jQuery? – jdphenix

Antwort

0

Um dies zu erreichen, müssen Sie in der Lage sein, die zuletzt gedrückten Tasten zu verfolgen. Versuchen Sie Folgendes:

// 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

Danke. Aber wo sollte der Code "window.alert" in Ihre Codes eingefügt werden? Und was bedeutet dein Code? – CKH

0

Sie die folgende Funktion verwenden:

$(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); 
     } 
    }; 
})()); 

Grundsätzlich müssen Sie nur noch einen Weg finden, die zuvor gedrückte Tasten zu speichern und sie dann überprüft jedes Mal, wenn eine neue Taste gedrückt wird. In diesem Fall wird es in einer Variable innerhalb der Schließung eines IIFE gespeichert.

JSFiddle.

+0

Aber Ihr Code in JSFiddle funktioniert nicht. – CKH

+0

@CKH Ja, Sie müssen auf das untere rechte Feld klicken und die Nummernblock-Tasten '+' und '-' verwenden. –

+0

Nein, wenn ich die Num-Taste gedrückt habe und + oder -, 1 gedrückt habe und nacheinander eins eingegeben habe, wurde kein Warnfenster angezeigt. – CKH