2017-09-15 63 views
14

背景: 我有一个文本。我在用户输入时捕获Tab键事件,并且插入Tab字符(\ t)并阻止浏览器关注下一个输入。 在Mac和PC上,这在所有浏览器上都没有问题。IOS蓝牙键盘 - 输入 - 选项卡事件

问题: 当使用连接到iPad的蓝牙键盘时,这不起作用。文档注册了tab键事件,但只要我专注于textarea,所有tab键事件都会被忽略并不会发送到浏览器。我也用文本输入进行了测试,并看到相同的结果。

实施例:https://plnkr.co/edit/NQvxijj3ISZ0B48fSHvi?p=preview

简单听者:

$(function(){ 
    $("body").bind("keydown",function(e){ 
    $("#bodyLog").append($("<div/>").html(e.keyCode)); 
    return e.preventDefault(); 
    }); 
}); 

当你有选择的体(不是TEXTAREA),tab键事件登记和数字9次出现。任何其他关键事件也会出现。

当你有选择的文本区域,所有的keydown事件被登记在身体监听器和监听textarea的......除了tab键两者。

如果任何人有一个解决方案,我将永远感激。

编辑 我已经观看了5位,然后转换,为制表符“固定”的问题。

我研究这个,只能推测,当集中在输入/文本域iOS不希望释放TAB键的控制。我曾尝试访问Google文档等网站,看看它们是否已经绕过它,但它们强制您下载该应用程序,而不是允许您在iOS上的Safari内编辑文件。我猜这是因为iOS想要完全控制Tab键。我在iOS上尝试过Chrome,但功能相同,所以我会说这不是Safari问题,而是iOS问题。

一个可能的但未经测试的解决方法是将整个<div>编码为textarea,然后用div替换textarea。由于tab键适用于所有其他元素,因此它在理论上应该可行,但它需要相当多的Javascript和CSS才能使元素像另一个元素一样工作。

EDIT 2

我已经发现,使用选项+ Tab键可以让Tab键在文字区域被捕获。我不觉得这是令人满意的。当我在普通键盘上输入段落时,我不键入Option + Tab,我只是键入Tab。据我所知,无法在textarea中单独捕获Tab键。

+0

按下iOS键盘上的OPT +选项卡是否与非仪器键盘上的选项卡执行相同的操作? –

+0

您是否尝试过使用http://dmauro.github.io/Keypress/? –

+0

这太奇怪了。你认为这与iOS Safari的怪异有关吗? https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html –

回答

0

您可以尝试以使用this library有这些事件:

  • previousbuttonclick
  • nextbuttonclick

然后,当你发现的元素旁边的textarea的重点是你回来给你的textarea并插入任何你想要的。

+0

如果你想要赏金,我希望看到一些代码会使用这个库产生问题的效果。据我所知,它仍然不起作用。 –

+1

@TimWithers我没有回复赏金,只是为了帮助你... –

0

我相信这是iOS中标签的已知问题。我在stackoverflow上找到类似的question。只需在您的代码之前添加此黑客:

var oldAddEventListener = EventTarget.prototype.addEventListener; 
EventTarget.prototype.addEventListener = function(eventName, eventHandler){ 
    oldAddEventListener.call(this, eventName, function(e) { 
     if(e.target.id === "textarea" && e.keyCode===9){ 
     e.preventDefault(); 
     } 
    eventHandler(e); 
    }); 
}; 

请检查,它应该工作。 Example

+0

你提交的plnkr没有上面的代码。它不工作,或者上面的代码被复制和粘贴。你想让我测试一个不同的plnkr吗? –

+0

您链接的问题其实是我一年前的问题。仍然没有满意的决议。 –

+0

哈哈,对不起(:您是否尝试过我以前版本的答案? – Firanolfind