如何使用带有蓝牙键盘的iPad在JavaScript上检测箭头键

Sea*_* N. 15 javascript jquery keyboard-events ipad ios

当使用蓝牙键盘时,我找不到在iPad和Chrome上的文本字段中检测箭头键的方法.
使用此测试HTML和JavaScript,触摸输入字段以使其获得焦点.
使用箭头键没有任何反应,但输入字母和数字以及keydown事件.

<!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>
Run Code Online (Sandbox Code Playgroud)

有可能检测到箭头吗?

小智 12

我明白这可能看起来像一个严峻的答案,如果是的话,我道歉.

几周前我一直在努力解决这个问题并最终放弃了.
试图让iPad上的箭头键来触发无数个小时onkeydown的事件似乎在所有的工作,就好像没有,甚至被压制他们.

游戏(或类似的东西)的一个很好的选择是使用WSAD键,这就是我做的.

WSAD密钥的代码是:

w: 87,
s: 83,
a: 65,
d: 68
Run Code Online (Sandbox Code Playgroud)

这是您通常检测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.
});
Run Code Online (Sandbox Code Playgroud)

箭头键的代码是:

up: 38,
down: 40,
left: 37,
right: 39
Run Code Online (Sandbox Code Playgroud)

这是您按下箭头键时通常会检测到的方式:

$(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();
});
Run Code Online (Sandbox Code Playgroud)

注意:您只能使用该onkeydown事件来检查是否已按下箭头键.

您还可以使用var key = event.keyCode ? event.keyCode : event.which;
引用彼得Darmis:

10.50之前的Opera版本通过返回event.which四个特殊键(插入,删除,主页和结束)的非零值来搞定,这意味着event.keyCode在旧浏览器中使用可能更"安全".
资源

引用jQuery api:

event.which属性规范化event.keyCodeevent.charCode.建议观察event.which键盘按键输入.欲了解更多详情,请阅读有关event.charCodeMDN.
资源

祝你好运,一切顺利.