uni-app 如何打开页面默认弹出软键盘,同时兼容iOS和Android
uni-app 如何打开页面默认弹出软键盘,同时兼容iOS和Android
解决方案
看了论坛中N篇关于“打开页面默认弹出软键盘”的回答,看都看花眼了,每次都要在错综复杂的关系中,去找出真正的“凶手”。在这里,我还是把这个坑填一下,我将完整的答案优化整理了下,同时兼容iOS和Android。
注:input不需要添加autofocus属性。
// 示例1
open_soft_keyboard({
input: “#username”
});
// 示例2
open_soft_keyboard({
input: ‘input[value=""]’
});
/**
-
默认打开软键盘
-
@param options{
-
input: ‘#nickname’ // 容器节点
-
}
-
@author 蔡繁荣
-
@version 1.0.3 build 20151226
*/
function open_soft_keyboard(options){
if(plus.os.name == ‘iOS’){
setTimeout(function(){
var wv_current = plus.webview.currentWebview().nativeInstanceObject();
wv_current.plusCallMethod({“setKeyboardDisplayRequiresUserAction”:false});
document.querySelector(options[‘input’]).focus();
}, 330);
}else{
// 因为安卓autofocus只有4.0版本以上才支持,所以这里使用native.js来强制弹出
setTimeout(function(){
// 在执行的时候需要让当前webview获取焦点
var wv_current = plus.android.currentWebview();
plus.android.importClass(wv_current);
wv_current.requestFocus();var Context = plus.android.importClass("android.content.Context"); var InputMethodManager = plus.android.importClass("android.view.inputmethod.InputMethodManager"); var main = plus.android.runtimeMainActivity(); var imm = main.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0,InputMethodManager.SHOW_FORCED); document.querySelector(options['input']).focus(); }, 330);
}
}
正好需要,感谢~
不顶不是人!
mark
留名
赞一个,回来试试!
好厉害。小白我请问一下高手,
// 示例1
open_soft_keyboard({
input: “#username”
});
这个参数#username 是input的id名称吗?每次在打开页面的时候初始化一次这个function open_soft_keyboard(options){}方法吗?
是的,具体你可以看下源代码,document.querySelector(options[‘input’]).focus();
不会吧,不过我觉得这其实不是问题,不影响
请问,这里的“plus.os.name=‘ios’”这块,plus是什么?这里写页面的时候需要加入什么js脚本吗?
plus 是5+环境,需要用hbuild真机运行或者用dcloud 的sdk 离线打包后才能有的.
回复 撒网要见鱼:非常谢谢您的回答!
好东西,顶一下!
安卓5.1,为何弹出的不是数字键盘呢
试试 <input type="number">
谢谢回复,type就是number类型的,ios会弹出数字键盘,安卓下自动弹出的却是字母键盘,输入法是讯飞。我试过注释掉自动弹出代码,手动定位到input框,弹出的是数字键盘。
大神,6s (plus)里面 输入法闪一下就没了,有时还看不出来弹,遇到过吗,,,,
我的也是,弹出闪一下就空白了
真是好东东···顶起 ··
刚学习前端
好东西,真真需要
怎么使用?有没有完整的代码?感谢
plus什么意思?
安卓下有延迟 怎么解决啊 @蔡繁荣
mark
你好,请问强制弹起后,怎么关闭
还是您这个方案靠谱 谢谢帮忙~
在uni-app中,默认情况下,软键盘的弹出是由用户输入行为触发的,例如点击输入框。要实现页面打开时默认弹出软键盘,并且兼容iOS和Android,可以利用页面的onReady
生命周期函数结合refocus
输入框的方法来实现。以下是一个具体的代码案例:
首先,确保你的页面中有一个输入框(<input>
或<textarea>
)。假设你的页面结构如下:
<template>
<view>
<input ref="autoFocusInput" type="text" v-model="inputValue" placeholder="请输入内容"/>
</view>
</template>
<script>
export default {
data() {
return {
inputValue: ''
};
},
onReady() {
this.focusInput();
},
methods: {
focusInput() {
// 延迟调用focus方法,确保DOM已渲染完毕
setTimeout(() => {
this.$refs.autoFocusInput.focus();
}, 100); // 根据实际情况调整延迟时间
}
}
};
</script>
<style scoped>
/* 样式根据需要调整 */
</style>
在这个例子中,我们做了以下几点:
-
定义输入框:在模板中定义了一个
<input>
元素,并给它设置了ref="autoFocusInput"
,以便在JavaScript中引用。 -
数据绑定:使用
v-model
指令将输入框的值绑定到组件的inputValue
数据属性上。 -
生命周期钩子:在
onReady
生命周期钩子中调用focusInput
方法。onReady
是uni-app提供的生命周期钩子,它会在页面首次渲染完成后被调用,此时页面的DOM已经准备好。 -
延迟调用
focus
方法:在focusInput
方法中,使用setTimeout
来延迟调用输入框的focus
方法。这是为了确保DOM元素已经完全渲染并可用。延迟时间可能需要根据实际情况进行调整。
注意事项:
- 在iOS设备上,软键盘的弹出行为可能受到系统策略的限制,某些情况下即使调用了
focus
方法也可能不会立即弹出软键盘。 - 对于Android设备,通常调用
focus
方法后软键盘会正常弹出。 - 如果遇到软键盘不弹出的问题,可以尝试调整
setTimeout
的延迟时间,或者检查是否有其他CSS或JavaScript代码影响了输入框的焦点行为。
通过上述方法,可以在uni-app中实现页面打开时默认弹出软键盘,并且尽量兼容iOS和Android设备。