uni-app input输入框自动聚焦或js控制聚焦后无法输入
uni-app input输入框自动聚焦或js控制聚焦后无法输入
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win10 家庭版 | HBuilderX |
产品分类:
uniapp/App
PC开发环境操作系统:
Windows
HBuilderX类型:
正式
HBuilderX版本号:
3.1.13
手机系统:
Android
手机系统版本号:
Android 7.1.1
手机厂商:
夜神模拟器(Android7.0.1)、商米收银机(Android7.1.2)
页面类型:
vue
打包方式:
云端
项目创建方式:
HBuilderX
示例代码:
- input框失去焦点后,通过再次js控制聚焦
<template>
<input type="text" :value="val" :autoFocus='true' :focus="csFocus" @blur="csFocus=false" placeholder="测试" />
<button @click="csFocus=true">聚焦</button>
</template>
<script>
data() {
return {
val: '',
csFocus: true
};
}
</script>
- 打开弹窗,弹窗内input自动聚焦
<template>
<button @click="show=true">显示弹窗</button>
<u-popup v-model="show" mode="center">
<view style="padding:50px;">
<input type="text" :value="val" :autoFocus='true' placeholder="测试" />
</view>
</u-popup>
</template>
<script>
data() {
return {
val: ''
};
}
</script>
预期结果:
input框自动聚焦或js控制聚焦后就能输入内容
实际结果:
input框自动聚焦或js控制聚焦后无法输入,需要点击input框才能输入
bug描述:
- input失去焦点后,通过js控制再次聚焦后无法输入
- 弹窗内的input自动聚焦无法输入
更多关于uni-app input输入框自动聚焦或js控制聚焦后无法输入的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
请问解决了吗,我得也是这样
更多关于uni-app input输入框自动聚焦或js控制聚焦后无法输入的实战教程也可以访问 https://www.itying.com/category-93-b0.html
问题解决了吗 好像是uni的bug H5是正常的 app端有问题
这是一个在 uni-app 中常见的输入框聚焦问题,通常与 Android 系统及 uni-app 的渲染机制有关。以下是针对你描述情况的解决方案:
问题分析:
- 在 Android 系统中,输入框的聚焦和软键盘管理存在时序问题
- 弹窗组件会创建新的渲染层,可能打断原有的聚焦流程
- uni-app 的
focus属性在某些场景下需要延迟执行
解决方案:
1. 对于手动控制聚焦的情况:
// 使用 $nextTick 确保 DOM 更新完成
<template>
<input type="text" :value="val" :focus="csFocus" @blur="onBlur" placeholder="测试" />
<button @click="handleFocus">聚焦</button>
</template>
<script>
export default {
data() {
return {
val: '',
csFocus: true
};
},
methods: {
handleFocus() {
this.csFocus = false;
this.$nextTick(() => {
this.csFocus = true;
});
},
onBlur() {
this.csFocus = false;
}
}
}
</script>
2. 对于弹窗内自动聚焦的情况:
<template>
<button @click="showPopup">显示弹窗</button>
<u-popup v-model="show" mode="center" @open="onPopupOpen">
<view style="padding:50px;">
<input type="text" :value="val" :focus="popupFocus" placeholder="测试" />
</view>
</u-popup>
</template>
<script>
export default {
data() {
return {
val: '',
show: false,
popupFocus: false
};
},
methods: {
showPopup() {
this.show = true;
},
onPopupOpen() {
// 弹窗完全打开后再设置聚焦
setTimeout(() => {
this.popupFocus = true;
}, 300);
}
}
}
</script>

