JavaScript - 使用蓝牙键盘检测iPad上的Tab键

7
我有一个文本字段,用户可以输入数据。他们可以使用制表符键,然后该字段会缩进。这在除了使用蓝牙键盘的ios设备上运行良好。
如果我访问 http://www.rapidtables.com/tools/notepad.htm,我可以在我的桌面/笔记本电脑上使用制表符。但是在我的iPad上没用。
如果我访问 https://api.jquery.com/keydown/, https://api.jquery.com/keyup/, https://api.jquery.com/keypress/ … 它们都不能检测到iPad上的制表符键。
制表符键在iOS本机应用程序(如Notes)中有效,并且制表符键确实可在网页内导航字段之间。是否有人知道如何在Javascript中检测制表符键的方法?
这里有一个我做的示例,让你可以看到代码和问题的实际表现:https://jsfiddle.net/9jv0bmbx/1/ 基本上我只是检查 e.keyCode===9 这个条件在台式机/笔记本电脑上可以正常工作。但在iPad上,它会注册除了Tab键之外的每个键。

如果在有问题的设备上记录按下Tab键时的按键事件,是否没有记录到任何内容?如果没有,可能是Tab键退出了字段,而没有在字段上触发按键事件。尝试创建一个全局按键事件记录器,并查看是否可以记录Tab键。以下代码应该可以实现:$(document).keydown(function(e){ console.log(e.keyCode);}); - RayfenWindspear
我已将其添加到fiddle中,但仍然没有任何反应。但是第一个字段中的Tab键仍会将焦点移动到第二个字段。因此,应用程序(浏览器)已注册Tab键以处理焦点事件,但我猜它并不是键盘事件。我已尝试使用Chrome和Safari,结果相同。 - Tim Withers
拿到了...我的建议没起作用。抱歉。 - RayfenWindspear
天啊,我刚弄好了一秒钟,现在不行了...给我一分钟。 - RayfenWindspear
1个回答

1

编辑2:

这里有另一种解决方案的选项。我找到了一篇文章,介绍如何捕获所有事件。下面是一个jsfiddle示例,文章在这里可以找到这个概念。请注意,在jsfiddle中,我返回了原始的addEventListener,因为在添加空侦听器之后,您所需的操作已完成。

jsfiddle

var oldAddEventListener = EventTarget.prototype.addEventListener;

EventTarget.prototype.addEventListener = function(eventName, eventHandler)
{
  oldAddEventListener.call(this, eventName, function(event) {
      if(event.target.id === "textarea" && event.keyCode===9){
        event.preventDefault();
        $(this).val($(this).val()+"\t");
        $("#log").append("<li>Tab Pressed</li>");
      }
    eventHandler(event);
  });
};
$("#textarea").keydown(function(e) {

});

EventTarget.prototype.addEventListener = oldAddEventListener;

编辑:

这里的测试键盘捕获了tab键按下事件。请查看此库,它应该可以解决您的问题。直接使用该库或通过查看代码了解它如何在iOS上捕获tab键。

http://dmauro.github.io/Keypress/

某种硬件/功能键问题妨碍了正常的tab键按下。按下OPTION+Tab会像平常一样触发您的处理程序。也许有一些设置导致了这个问题,但显然您不能指望用户更改他们的设置来使用您的应用程序。您可能能够找到某种方式来利用它,但似乎这是默认行为,您无法摆脱它。

可能可以检测iOS设备并找出某种方法来覆盖tab键的默认行为。或者您可以捕获focusOut或blur事件,并检测是否不是由鼠标引起的。


我还有一个解决方案需要修改,但是我得等那个带着iPad的家伙吃完午饭回来解锁它 XD。 - RayfenWindspear
我刚刚设置了http://jsfiddle.net/gqxgax76/,以查看是否可以使用Keypress。我发现当文档/窗口具有焦点且没有元素时,Tab键会被识别。一旦您将焦点放在输入/文本区域上,Tab键就不再起作用。我将尝试看看能否使第二个示例起作用。 - Tim Withers
那个 jsfiddle 在我的电脑上没有显示选项卡。但是 OPT+Tab 还是可以用的。 - RayfenWindspear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接