2015-11-06 40 views
1

三星软键盘上的预测文字功能导致Typeahead字段出现奇怪问题。使用三角形软键盘在PhoneGap上使用角带式打字机时出现异常行为

我正在构建一个角度应用程序,并使用angular-strap for typeahead字段。然后我使用PhoneGap将其转换为iOS和Android应用程序。

问题只发生在预测性文本打开时,它以某种方式与预先输入字段交互,导致字符重复,所以如果在输入“v”时键入“adv”,输入会从“ad”更改为“ adadv”。它还会在删除时创建一个奇怪的行为,它会在每次删除后将光标移动到单词的末尾。因此,要删除示例中的第一个广告,我必须在d之后设置光标,删除,然后将光标设置在a之后。

我只在使用应用程序时遇到此问题,如果我在手机的浏览器中打开角度应用程序,typeahead字段可以正常工作。

我也只在Galaxy S6 Edge +和三星键盘上看到这个。在Galaxy Note 2上,使用三星键盘和预测文本,它可以工作。在Moto E Google键盘上,它可以工作。

我试着将属性autocomplete =“off”添加到typeahead输入中,但我非常确定该属性只被浏览器使用。无论如何,它并没有解决我的问题。

有没有什么办法可以防止预测文本与现场交互?

+0

我有这个相同的问题。运气好的话? –

+0

它影响的设备太少,无法保证我们现在花更多时间,所以我们只是告诉用户,如果它与预先输入的字段冲突,他们需要禁用他们的设备预测文本。 – mike

+0

我主要在数字字段上遇到此问题。我在某处读到数字字段的解决方法,将它们设置为type =“tel”,并且在这种情况下,预测文本显然会关闭。这帮助了我,但不幸的是你不会帮助你。 –

回答

0

我发现将setTimeout添加到typeahead的_onInput方法可以修复此问题。

在typeahead.jquery.js,我代替:

_onInput: function onInput() { this._setQuery(this.getInputValue()); this.clearHintIfInvalid(); this._checkLanguageDirection(); }

有:

_onInput: function onInput() { var self = this; setTimeout(function() { self._setQuery(self.getInputValue()); self.clearHintIfInvalid(); self._checkLanguageDirection(); }, 0); }

这使得键盘/浏览器的预输入代码踢之前,做它的事(如果你在调试器中运行它,你可以在这段时间看到文本改变)。

这不是一个很好的解决方案,因为如果你有新的typeahead版本,你将不得不重做一遍。我将替换作为构建过程的一部分,这有助于一些,但更好的解决方案是提交拉取请求。我不太了解这个项目,所以不知道作者是否想要做出这样的改变。