背景: 我有一个文本区域。当用户输入时,我捕获Tab键事件,并插入一个制表符(\t),防止浏览器聚焦到下一个输入框。这在所有浏览器上的Mac和PC上都可以正常工作。
问题: 当使用连接到iPad的蓝牙键盘时,此方法无法工作。文档会注册Tab键事件,但只要我将焦点集中在文本区域上,所有Tab键事件就会被忽略并不会发送到浏览器。我也已经测试了文本输入,结果相同。
示例: https://plnkr.co/edit/NQvxijj3ISZ0B48fSHvi?p=preview
简单监听器:
$(function(){
$("body").bind("keydown",function(e){
$("#bodyLog").append($("<div/>").html(e.keyCode));
return e.preventDefault();
});
});
当您选择了body(而不是textarea)时,tab键事件被注册并出现数字9。任何其他按键事件也会出现。
当您选择textarea时,所有的keydown事件都会在body监听器和textarea监听器上注册……除了tab键。
如果有人有解决方法,我将万分感激。
编辑:我通过观察5个空格来“修复”这个问题,然后将其转换为制表符。
我已经进行了研究,只能想到iOS不希望在输入/文本区域中释放TAB键的控制权。我尝试访问像Google Docs这样的网站,看看它们是否绕过了这个问题,但它们强制你下载App,而不允许你在iOS Safari中编辑文件。我猜这是因为iOS想要完全控制tab键。我尝试在iOS上使用Chrome,但它的功能与Safari相同,所以我认为这不是Safari的问题,而是iOS的问题。
一个可能的、但未经测试的解决方法是编写一个整个
来像一个textarea一样工作,然后用div替换textarea。由于tab键在所有其他元素上都有效,理论上应该可以正常工作,但需要大量的Javascript和CSS使一个元素像另一个元素一样工作。
编辑2:
我发现使用Option+Tab允许在textarea中捕获tab键。虽然我觉得这不够令人满意。当我在普通键盘上输入段落时,我不会输入Option+Tab,我只是输入Tab。据我所知,在textarea内部没有办法单独捕获Tab键。
编辑2:
我发现使用Option+Tab允许在textarea中捕获tab键。虽然我觉得这不够令人满意。当我在普通键盘上输入段落时,我不会输入Option+Tab,我只是输入Tab。据我所知,在textarea内部没有办法单独捕获Tab键。