uni-app schema2code生成多个input框页面时,如果一个input已获取焦点再点击下一个input,键盘跳动两次后消失
uni-app schema2code生成多个input框页面时,如果一个input已获取焦点再点击下一个input,键盘跳动两次后消失
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 21H1 | HBuilderX |
3.4.12 | ||
1.05.2204250 | ||
2.24.4 |
示例代码:
<view class="uni-container">
<uni-forms ref="form" :modelValue="formData" validate-trigger="submit" err-show-type="toast">
<uni-forms-item name="unit_name" label="单位名称" required>
<uni-easyinput @focus="inputFocus" @blur="inputBlur" v-model="formData.unit_name" placeholder="单位名称"></uni-easyinput>
</uni-forms-item>
<uni-forms-item name="tax_number" label="税号" required>
<uni-easyinput @focus="inputFocus" @blur="inputBlur" v-model="formData.tax_number" placeholder="税号"></uni-easyinput>
</uni-forms-item>
<uni-forms-item name="unit_address" label="单位地址">
<uni-easyinput @focus="inputFocus" @blur="inputBlur" v-model="formData.unit_address" placeholder="单位地址"></uni-easyinput>
</uni-forms-item>
<uni-forms-item name="tel" label="电话号码">
<uni-easyinput v-model="formData.tel" placeholder="电话号码"></uni-easyinput>
</uni-forms-item>
<uni-forms-item name="open_account" label="开户银行">
<uni-easyinput v-model="formData.open_account" placeholder="开户银行"></uni-easyinput>
</uni-forms-item>
<uni-forms-item name="bank_number" label="银行账号">
<uni-easyinput v-model="formData.bank_number" placeholder="银行账号"></uni-easyinput>
</uni-forms-item>
<view class="uni-button-group">
<button type="primary" class="uni-button" @click="submit">提交</button>
</view>
</uni-forms>
</view>
操作步骤:
- 使用schema2code生成多个input框的页面
预期结果:
- 点击input键盘无异常
实际结果:
- 点击input后键盘跳动两次后消失
bug描述:
- scheam2code生成的代码,小程序真机调试.如果一个input已经获取焦点了,再点击下一个input框会连续触发两次blur,并不会触发focus.导致键盘弹两次后消失
2 回复
你好解决了吗?
在使用 uni-app 的 schema2code
生成多个 input
框的页面时,如果遇到一个 input
已获取焦点,再点击下一个 input
时,键盘跳动两次后消失的问题,可能是由于以下原因导致的:
1. 键盘弹起与页面布局调整
- 在移动端,当
input
获取焦点时,键盘会弹起,这可能会导致页面布局发生变化(例如页面被键盘顶起)。 - 如果页面布局调整过程中触发了某些事件(如
focus
或blur
事件),可能会导致键盘行为异常。
2. input
框的 focus
和 blur
事件冲突
- 当点击下一个
input
时,当前input
会触发blur
事件,而下一个input
会触发focus
事件。 - 如果这两个事件处理不当,可能会导致键盘行为异常。
3. schema2code
生成的代码问题
schema2code
生成的代码可能在某些情况下没有处理好input
框的焦点切换逻辑,导致键盘行为异常。
解决方案
1. 手动处理 input
的 focus
和 blur
事件
- 你可以在
input
的focus
和blur
事件中手动处理键盘的显示和隐藏逻辑,确保键盘不会因为页面布局调整而异常消失。
<template>
<view>
<input v-for="(item, index) in inputs" :key="index" v-model="item.value" @focus="handleFocus(index)" @blur="handleBlur(index)" />
</view>
</template>
<script>
export default {
data() {
return {
inputs: [
{ value: '' },
{ value: '' },
{ value: '' }
]
};
},
methods: {
handleFocus(index) {
// 处理 focus 事件
console.log(`Input ${index} focused`);
},
handleBlur(index) {
// 处理 blur 事件
console.log(`Input ${index} blurred`);
}
}
};
</script>
2. 使用 uni-app
的 input
组件属性
uni-app
的input
组件有一些属性可以帮助你更好地控制键盘行为,例如adjust-position
属性可以控制键盘弹起时是否自动调整页面位置。
<template>
<view>
<input v-for="(item, index) in inputs" :key="index" v-model="item.value" :adjust-position="false" />
</view>
</template>
- 设置
adjust-position="false"
可以防止键盘弹起时页面布局调整,从而避免键盘跳动的问题。
3. 检查 schema2code
生成的代码
- 如果问题依然存在,建议检查
schema2code
生成的代码,看看是否有不必要的focus
或blur
事件处理逻辑,或者是否有其他可能导致键盘行为异常的代码。
4. 使用 uni-app
的 focus
方法
- 你可以在
input
的focus
事件中手动调用uni-app
的focus
方法,确保键盘正常显示。
<template>
<view>
<input v-for="(item, index) in inputs" :key="index" v-model="item.value" @focus="handleFocus(index)" />
</view>
</template>
<script>
export default {
data() {
return {
inputs: [
{ value: '' },
{ value: '' },
{ value: '' }
]
};
},
methods: {
handleFocus(index) {
// 手动调用 focus 方法
this.$refs[`input${index}`][0].focus();
}
}
};
</script>