无法在 iOS 9 上使用 fastclick 输入文本区域

Posted

技术标签:

【中文标题】无法在 iOS 9 上使用 fastclick 输入文本区域【英文标题】:Cannot type into textarea with fastclick on iOS 9 【发布时间】:2016-01-28 11:29:15 【问题描述】:

过去几天我一直在寻找解决方案,但所有应该工作的东西(根据文档)都没有。

我正在使用fastclick 来消除打算在 iPad 上运行的 html5 应用程序的 300 毫秒延迟。一切都很好,除了我失去了在 textarea 中输入文本的能力。简单的单行字段有效,但多行文本区域无效。

当我点击文本区域时,键盘会弹出,我可以开始输入。输入的第一个字母出现在文本区域 - 仅此而已。随后的字母没有。如果我关闭键盘并再次点击文本区域,我可以再输入一个字母。

我已经尝试了所有建议,包括 needsclickneedsfocus 等。我尝试编辑 fastclick.js 以扩展处理 input 元素的特殊代码以也覆盖 textarea - 没有。

我可能因为它而不得不转储 fastclick 并自己手动完成所有事情,因为我已经在这个问题上失去了将近一周的时间。然而,在我走那条路之前,也许有人可以为我指明正确的方向。

请注意,该问题出现在装有 ios 9.2(特别是 9.2.1 - 最新版本)的 iPad 和 iPhone 上。

【问题讨论】:

【参考方案1】:

好的,原因很简单 - 与 fastclick 无关。是 this answer 真正为我解决了这个问题。

在我的 CSS 中,我有以下内容:

body * 
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    user-select: none;


body input 
    -webkit-touch-callout: text;
    -webkit-user-select: text;
    user-select: text;

这样做是为了对付愚蠢的用户,他们会在按钮上“touchstart”然后开始思考他们想要什么 - 在“touchend”之前,ios 会进入复制/粘贴模式。

然后在输入中明确禁用它以允许在文本中复制/粘贴。然而,我忘了在第二部分中包含 textarea 。现在第二块看起来像这样:

body input, body textarea 
    -webkit-touch-callout: text;
    -webkit-user-select: text;
    user-select: text;

一切都按预期进行。

【讨论】:

【参考方案2】:

jQuery 修复,

$('input.form-control,textarea').on('click',function()
    $(this).focus();
);

这在我的情况下有效。

【讨论】:

这对我有用,因为父元素有一个 mousedown 事件阻止光标进入文本区域。因此,不必删除 mousedown,添加它可以让我保留这两个功能。

以上是关于无法在 iOS 9 上使用 fastclick 输入文本区域的主要内容,如果未能解决你的问题,请参考以下文章

ios 移动端输入框点击不灵敏 fastclick

Famo.us “Fastclick” 在移动设备上点击两次

在项目中全局添加FastClick导致图片上传插件在ios端失效的解决方案

我可以在 Cordova 中运行 Fastclick ReactJS

使用fastclick的时候 click() 触发失效

fastclick插件 导致 日期插件无法触发