uni-app云打包后,从下一页面返回带input页面时,input不能自动获焦
uni-app云打包后,从下一页面返回带input页面时,input不能自动获焦
操作步骤:
<input type="text" class="input_but" ref="elInput" readonly="readonly" confirm-type="search" :focus="isFocus" v-model="input" />
预期结果:
从下一页面返回到input页面的时候可以自动获焦
实际结果:
实际没有自动获焦
bug描述:
<input type="text" class="input_but" ref="elInput" readonly="readonly" confirm-type="search" :focus="isFocus" v-model="input" />
input在真机测试的时候从下一页面返回到本页面的时候可以自动获焦,但是云打包后安装到手机,从下一页面返回到此input页面就不能自动获焦了
| 信息类别 | 信息内容 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Windows |
| PC开发环境版本 | 10 |
| HBuilderX类型 | 正式 |
| HBuilderX版本 | 3.3.6 |
| 手机系统 | Android |
| 手机系统版本 | Android 9.0 |
| 手机厂商 | PDA |
| 手机机型 | G47CN |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
更多关于uni-app云打包后,从下一页面返回带input页面时,input不能自动获焦的实战教程也可以访问 https://www.itying.com/category-93-b0.html
返回上个页面的时候,手动执行focus
更多关于uni-app云打包后,从下一页面返回带input页面时,input不能自动获焦的实战教程也可以访问 https://www.itying.com/category-93-b0.html
<input type=“text” class=“input_but” ref=“elInput” @blur=“isFocus = false” @confirm=“doSearch” readonly=“readonly” confirm-type=“search” :focus=“isFocus” v-model=“input” style=“font-size: 22rpx;” value="" placeholder=“输入序号查询” /> onShow() { this.input = null uni.hideKeyboard(); //隐藏软键盘 this.isFocus = false; this.$nextTick(() => { this.input = ‘’ this.isFocus = true; }) this.listsa() },
onShow时已经手动获焦,但还是一样从下一页面返回到本页面时不能获焦
这个问题是由于uni-app在云打包后的页面生命周期处理差异导致的。在真机调试时,页面返回时能正常触发focus逻辑,但云打包后页面可能被缓存,导致焦点状态未正确恢复。
解决方案:
- 使用onShow生命周期:在页面的onShow钩子中手动触发焦点
onShow() {
this.$nextTick(() => {
this.isFocus = true
// 或者直接操作DOM
this.$refs.elInput.focus()
})
}
- 添加延迟确保DOM就绪:
onShow() {
setTimeout(() => {
this.isFocus = true
}, 100)
}
-
检查readonly属性:你的input设置了
readonly="readonly",这可能会影响焦点获取。如果需要可输入,建议移除该属性或改为disabled。 -
使用页面栈状态管理:在onHide时保存状态,onShow时恢复:
data() {
return {
isFocus: false
}
},
onHide() {
this.isFocus = false
},
onShow() {
this.$nextTick(() => {
this.isFocus = true
})
}

