uni-app 不同页面的Input属性的@focus串联问题
uni-app 不同页面的Input属性的@focus串联问题
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.1.2
手机系统:Android
手机系统版本号:Android 9.0
手机厂商:vivo
手机机型:vivox21
页面类型:nvue
打包方式:云端
示例代码:
Scanning.vue 页
<view v-if="input_bool">
<input class="input" @confirm="confirm1" v-model="value" key="1" auto-focus="autofocus"
:auto-blur="false" [@focus](/user/focus)="hidekeyboard" @click="key_bool=false" :disabled="enable_bool">
</view>
<view v-else>
<input class="input" @confirm="confirm1" v-model="value" key="2" auto-focus="autofocus"
:auto-blur="false" [@focus](/user/focus)="hidekeyboard" @click="key_bool=false" :disabled="enable_bool" />
</view>
_____methods_____
//隐藏软键盘
hidekeyboard() {
if (this.key_bool) {
uni.hideKeyboard();
console.log("隐藏软键盘")
} else {
this.key_bool = true;
console.log("软键盘", this.key_bool);
}
},
NativeInput.nvue 页
<input ref="input" class="input" v-model="value" @confirm="confirm1"
:auto-blur="false" :focus="true" :confirm-hold="true" :placeholder="placeholder" />
在打开过 Scanning.vue 后,再打开NativeInput.nvue 页,前者中input绑定的 [@focus](/user/focus)
事件却对NativeInput起效。
——————console.log———— 21:14:44.061 onLoad at pages/Module/Scanning.vue:60 21:14:44.093 卸载广播 at pages/Module/Scanning.vue:86 21:14:44.125 挂载广播处理 at pages/Module/Scanning.vue:88 21:14:44.155 数据表已存在 at pages/Module/Scanning.vue:75 21:14:44.434 跳转成功 at pages/Menu/index.vue:40 21:14:44.747 隐藏软键盘 at pages/Module/Scanning.vue:201 21:14:46.816 mounted at components/ScanningPage/NativeInput.nvue:57 21:14:46.847 数据表已存在 at components/ScanningPage/NativeInput.nvue:69 21:14:46.909 跳转成功 at pages/Menu/index.vue:40 21:14:47.189 隐藏软键盘 at pages/Module/Scanning.vue:201
## 操作步骤:
1
## 预期结果:
1
## 实际结果:
1
更多关于uni-app 不同页面的Input属性的@focus串联问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
21:14:44.061 onLoad at pages/Module/Scanning.vue:60
21:14:44.093 卸载广播 at pages/Module/Scanning.vue:86
21:14:44.125 挂载广播处理 at pages/Module/Scanning.vue:88
21:14:44.155 数据表已存在 at pages/Module/Scanning.vue:75
21:14:44.434 跳转成功 at pages/Menu/index.vue:40
21:14:44.747 隐藏软键盘 at pages/Module/Scanning.vue:201
21:14:46.816 mounted at components/ScanningPage/NativeInput.nvue:57
21:14:46.847 数据表已存在 at components/ScanningPage/NativeInput.nvue:69
21:14:46.909 跳转成功 at pages/Menu/index.vue:40
21:14:47.189 隐藏软键盘 at pages/Module/Scanning.vue:201
大家注意看到 ,NativeInput.nvue 输出后又再 Scanning.vue 中输出,而 跳转成功 是菜单到 Scanning.vue。
更多关于uni-app 不同页面的Input属性的@focus串联问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
收到,将会排查
bug 确认,已加分,后续修复
HBuilderX 3.1.3 alpha 已修复
这个问题是由于uni-app中input组件的focus事件在页面切换时没有正确解绑导致的。以下是解决方案:
- 在Scanning.vue页面的onUnload生命周期中手动解绑事件:
onUnload() {
this.$off('focus', this.hidekeyboard);
}
- 或者给两个页面的input添加不同的ref名称,避免冲突:
// Scanning.vue
<input ref="scanInput" ... />
// NativeInput.nvue
<input ref="nativeInput" ... />
- 也可以尝试在NativeInput.nvue页面显示时强制重新设置focus状态:
mounted() {
this.$nextTick(() => {
this.$refs.input.focus();
});
}