Подтвердить что ты не робот

Как обнаружить клавиши со стрелками с помощью JavaScript на iPad с клавиатурой Bluetooth

Я не могу найти способ обнаружения клавиш со стрелками в текстовом поле в Safari и Chrome на iPad, когда используется клавиатура Bluetooth.
Используя этот тест HTML и JavaScript, коснитесь поля ввода, чтобы дать ему фокус.
С помощью клавиш со стрелками ничего не происходит, но появляются буквы и цифры, а также события смены клавиш.

<!DOCTYPE html>
<html>
<head>
  <title>Test page.</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
  <form>
    <input id="input" style="width: 600px;" type="textarea" />
  </form>
  <div id="keydisp" style="width 600px; height: 50px"></div>
  <script type="text/javascript">
    $(document).keydown(function(event) {
      var keyCode = event.which;
      document.getElementById("keydisp").innerHTML = "key pressed: " + keyCode;
    });
  </script>
</body>
</html>

Можно ли обнаружить стрелки?

4b9b3361

Ответ 1

Я понимаю, что это может показаться мрачным ответом, и я приношу свои извинения, если это так.

Я боролся с этой проблемой несколько недель назад и в конце концов отказался от нее.
Бесчисленные часы попыток получить клавиши со стрелками на iPad для запуска события onkeydown действительно работали вообще, это было похоже на то, что они даже не были нажаты.

Хорошей альтернативой для игры (или что-то в этом роде) является использование клавиш WSAD, это было то, что я сделал.

Кодами для клавиш WSAD являются:

w: 87,
s: 83,
a: 65,
d: 68

Так вы обычно обнаруживаете, когда нажаты клавиши WSAD:

$(document).on("keydown", function(event) {
  if (event.which == 87) {
    // W key Has Been Pressed
  } else if (event.which == 83) {
    // S key Has Been Pressed
  } else if (event.which == 65) {
    // A key Has Been Pressed
  } else if (event.which == 68) {
    // D key Has Been Pressed
  }
  // prevent the default action
  // event.preventDefault(); // This is optional.
});

Кодами клавиш со стрелками являются:

up: 38,
down: 40,
left: 37,
right: 39

Так вы обычно обнаруживаете, когда нажаты клавиши со стрелками:

$(document).on("keydown", function(event) {
  if (event.which == 37) {
    // Left Arrow Has Been Pressed
  } else if (event.which == 38) {
    // Up Arrow Has Been Pressed
  } else if (event.which == 39) {
    // Right Arrow Has Been Pressed
  } else if (event.which == 40) {
    // Down Arrow Has Been Pressed
  }
  // prevent the default action
  event.preventDefault();
});

ПРИМЕЧАНИЕ. Вы можете использовать событие onkeydown, чтобы проверить, были ли нажаты клавиши со стрелками.

Вы также можете использовать var key = event.keyCode ? event.keyCode : event.which;
Цитирование Peter Darmis:

Версии Opera до 10.50 перепутаны, возвращая ненулевые значения event.which для четырех специальных клавиш (Insert, Delete, Home и End), что означает, что использование event.keyCode может быть более "отказоустойчивым" в старых браузерах. < br/ " > Источник

Цитирование jQuery api:

Событие, свойство которого нормализует event.keyCode и event.charCode. Рекомендуется смотреть event.which для ввода клавиатуры. Подробнее см. event.charCode в MDN.
Источник

Удачи и всего наилучшего.

Ответ 2

Для большинства браузеров вы можете использовать что-то вроде

function returnKeyCode(e) {
  var keyCode = e.keyCode ? e.keyCode : e.which;
  switch (keyCode) {
    case 37:
      alert(e.code ? e.code : e.key);
      break;
    case 38:
      alert(e.code ? e.code : e.key);
      break;
    case 39:
      alert(e.code ? e.code : e.key);
      break;
    case 40:
      alert(e.code ? e.code : e.key);
      break;
    default:
      alert(e.code ? e.code : e.key);
  }
}
window.addEventListener("keydown", function (e) {
  returnKeyCode(e);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Ответ 3

Это может быть дополнительным или чем-то другим. В этом примере клавиша W проверяется при нажатии.

$(document).keydown(function(e){
     var event = e.which || e.keyCode;
     if (event == 87){ alert("C was Pressed."); }
});

Вы можете проверить, можно ли использовать keyCode или which в зависимости от типа и версии вашего браузера.

Подробнее Информация о событиях клавиатуры.

Для Коды событий событий.

Ответ 4

Проблема, вероятно, вызвана поведением клавиш со стрелками в iPad. Обычно клавиши со стрелками прокручивают документ. Но когда текстовое поле сфокусировано, по умолчанию предотвращается. Это может быть в реализации браузера, который также останавливает пузырьки.

Вместо прослушивания событий документа вы также можете прослушивать события полей ввода. См. Fiddle. У меня нет клавиатуры bluetooth, поэтому я не могу ее протестировать. Извините, если он не работает.

$(document).keydown(
function (event) {
        var keyCode = event.which;
        document.getElementById("keydisp").innerHTML = "key pressed: " + keyCode;
});

$("input").keydown(
function (event) {
        var keyCode = event.which;
        document.getElementById("keydisp").innerHTML = "key pressed: " + keyCode;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>

<input type="textarea" id="input" autocorrect="off" autocapitalize="off" style="width: 600px;">
<div id="keydisp" style="width 600px; height: 50px"></div>