uni-app schema2code生成多个input框页面时,如果一个input已获取焦点再点击下一个input,键盘跳动两次后消失

发布于 1周前 作者 songsunli 来自 Uni-App

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 获取焦点时,键盘会弹起,这可能会导致页面布局发生变化(例如页面被键盘顶起)。
  • 如果页面布局调整过程中触发了某些事件(如 focusblur 事件),可能会导致键盘行为异常。

2. input 框的 focusblur 事件冲突

  • 当点击下一个 input 时,当前 input 会触发 blur 事件,而下一个 input 会触发 focus 事件。
  • 如果这两个事件处理不当,可能会导致键盘行为异常。

3. schema2code 生成的代码问题

  • schema2code 生成的代码可能在某些情况下没有处理好 input 框的焦点切换逻辑,导致键盘行为异常。

解决方案

1. 手动处理 inputfocusblur 事件

  • 你可以在 inputfocusblur 事件中手动处理键盘的显示和隐藏逻辑,确保键盘不会因为页面布局调整而异常消失。
<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-appinput 组件属性

  • uni-appinput 组件有一些属性可以帮助你更好地控制键盘行为,例如 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 生成的代码,看看是否有不必要的 focusblur 事件处理逻辑,或者是否有其他可能导致键盘行为异常的代码。

4. 使用 uni-appfocus 方法

  • 你可以在 inputfocus 事件中手动调用 uni-appfocus 方法,确保键盘正常显示。
<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>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!