Javascript нажмите код клавиши "+1 ввод" и "-1 ввод"

Кто-нибудь знает, как обнаружить нажатие клавиш кода "+1 ввод" и "-1 ввод" в Javascript, пожалуйста. Я хотел бы обнаружить при нажатии клавиш ONE BY ONE, а не в одно время.

Но когда я написал следующие коды, никакого эффекта не было.

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

Для ваших профессиональных комментариев, пожалуйста.

2 ответа

Для этого необходимо иметь возможность отслеживать предыдущие нажатые клавиши. Попробуйте следующее:

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

Вы можете использовать следующую функцию:

$(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.

Другие вопросы по тегам