【发布时间】:2014-02-22 11:45:31
【问题描述】:
我在 iOS 7 上使用带有 html 输入文本的 cordova 2.7 开发电话间隙应用程序时遇到问题。当我选择输入文本时,键盘会弹出。但由于失去焦点,无法输入任何内容。我必须再次选择才能输入文字。
谁能帮我解决这个问题。
【问题讨论】:
标签: ios cordova textfield lostfocus
我在 iOS 7 上使用带有 html 输入文本的 cordova 2.7 开发电话间隙应用程序时遇到问题。当我选择输入文本时,键盘会弹出。但由于失去焦点,无法输入任何内容。我必须再次选择才能输入文字。
谁能帮我解决这个问题。
【问题讨论】:
标签: ios cordova textfield lostfocus
这是一个已在 Cordova 中记录的已知问题:https://issues.apache.org/jira/browse/CB-5115。我也想要一个解决方法,因为它并不理想。
这是那里解释的解决方法,
window.document.body.ontouchstart = (e) => {
if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') {
e.preventDefault();
e.target.focus();
}
};
【讨论】:
我遇到了类似的问题,键盘会出现,但文本框中没有显示任何输入内容。我的是由 css 引起的 -
* {
-webkit-user-select: none; /* prevent copy paste */
}
我通过覆盖文本框的样式解决了这个问题 -
input[type="text"] {
-webkit-user-select: text;
}
【讨论】:
cordova 应用程序中有一个配置文件 config.xml,默认情况下,cordova 不允许您通过 javascript 调用控制焦点,这意味着键盘可以“消失”
改变这个:
<preference name="KeyboardDisplayRequiresUserAction" value="true" />
到
<preference name="KeyboardDisplayRequiresUserAction" value="false" />
然后只需为在 setTimeout 内点击时设置焦点的字段编写一个事件处理程序。这对我最近非常有效。
【讨论】:
我遇到了这个问题,发现我已经在另一个 Phonegap 项目中使用它修复了它。它与@mld 的答案基本相同,但使用的是 html。使用 * 不适用于我在 iOS 上的应用。
html {
-webkit-user-select: none; /* prevent text selection */
}
input[type="text"] {
-webkit-user-select: text;
}
【讨论】:
我在 Ionic V1 / Angular 1.5 项目中遇到了这个问题。这个修复对我有用:
window.addEventListener('native.keyboardshow', function () {
if ( document.activeElement != document.getElementById('my-input') && document.activeElement.nodeName != 'INPUT' ){
document.getElementById('my-input').focus()
}
});
当我们点击输入时,键盘会出现。然后我们可以检查我们的输入元素是否真正聚焦。如果没有,我们手动聚焦它。如果它是另一个输入,我们不会关注它。
我在组件的 $onInit 函数中调用了它 - 确保在使用 $onDestroy 销毁组件时移除事件侦听器。这也假设您使用的是ionic-plugin-keyboard 插件。
这适用于一个输入,但如果您在同一页面上有多个输入,您可能需要额外的逻辑来防止您的应用在键盘打开时专注于错误的输入。
【讨论】: