Javascript - 带蓝牙键盘的iPad标签键检测

时间:2016-05-09 17:11:44

标签: javascript jquery ios

我有一个文本字段,用户可以在其中键入数据。他们可以使用tab键,然后字段缩进。除了配备蓝牙键盘的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上的标签键。

tab键可以在ios本机应用程序(如Notes)中使用,tab键可以在网页内的字段之间导航。有没有办法检测Javascript中的任何人都知道的Tab键?

修改

这是一个小提琴我拼在一起,所以你可以看到代码和问题:https://jsfiddle.net/9jv0bmbx/1/基本上我只是检查e.keyCode===9哪个适用于台式机/笔记本电脑。在iPad上,它会注册每个键,除了标签键。

1 个答案:

答案 0 :(得分:1)

<强> EDIT2:

这是解决方案的另一种选择。我发现了一篇关于如何捕获所有事件的文章。下面是一个jsfiddle,这是我发现这个概念的article。请注意,在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;

修改

此处的测试键盘捕获标签keydown。看看这个库,它应该解决你的问题。要么直接使用库,要么通过挖掘代码来弄清楚它如何捕获iOS上的选项卡。 http://dmauro.github.io/Keypress/

存在某种硬件/功能键问题,妨碍正常的Tab键按下。按OPTION + Tab会像平常一样触发你的处理程序。也许有某种设置导致了这种情况,但显然您不能指望您的用户更改其设置以使用您的应用。您可能能够找到一些方法来以某种方式利用它,但看起来这是默认行为,而您却坚持使用它。

有可能检测iOS设备并找出标签默认行为的某种覆盖。或者您可以捕获focusOut,或模糊事件并检测它是否不是由鼠标引起的。