【发布时间】:2018-02-25 04:25:06
【问题描述】:
背景: 我有一个文本区域。我在用户键入时捕获 Tab 键事件,并插入一个 Tab 字符 (\t) 并防止浏览器专注于下一个输入。 这在 Mac 和 PC 上以及所有浏览器上都可以正常工作。
问题: 使用连接到 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)时,将注册制表键事件并显示数字 9。任何其他关键事件也会出现。
当您选择了 textarea 时,所有 keydown 事件都会在 body 侦听器和 textarea 侦听器上注册...除了 tab 键。
如果有人有解决方案,我将永远感激不尽。
编辑 我已经通过观察 5 个空格,然后将其转换为制表符来“解决”这个问题。
我对此进行了研究,只能认为 iOS 不想在专注于输入/文本区域时释放对 TAB 键的控制。我曾尝试访问 Google Docs 之类的网站,看看他们是否已经绕过它,但它们会强制您下载该应用程序,而不是允许您在 iOS 上的 Safari 中编辑文件。我猜这是因为 iOS 想要完全控制 tab 键。我在 iOS 上尝试过 Chrome,但它的功能相同,所以我想说这不是 Safari 的问题,而是 iOS 的问题。
一种可能但未经测试的解决方法是将整个 <div> 编码为像 textarea 一样,然后用 div 替换 textarea。由于 tab 键适用于所有其他元素,理论上它应该可以工作,但它需要相当多的 Javascript 和 CSS 才能使一个元素表现得像另一个元素。
编辑 2
我发现使用 Option+Tab 可以在 textarea 中捕获 tab 键。不过我觉得不是很满意。当我在普通键盘上键入段落时,我不键入 Option+Tab,我只是键入 Tab。据我所知,没有办法在文本区域内单独捕获 Tab 键。
【问题讨论】:
-
在 iOS 键盘上按 OPT+tab 是否与在非仪器键盘上按 tab 一样?
-
这太奇怪了。你认为这与 iOS safari 的怪异有关吗? quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
我尝试了 dmauro 按键库,结果相同。我会看看是否有任何其他带有选项卡的键组合可以做任何事情。我认为 iOS 的怪异是整个问题,但我不认为它完全与事件冒泡有关。我认为,但不确定,textareas 和输入字段仅禁用了 Tab 键,因此浏览器可以控制表单字段之间的移动以改善用户体验,这在添加合法时会受到阻碍标签到文本区域中的段落
-
@TimWithers 你解决了这个问题吗?看看我的回答。
标签: javascript ios ipad bluetooth keydown