uni-app 半屏手写输入文字时,最后一个文字总是需要点击一下才能赋值给v-model

uni-app 半屏手写输入文字时,最后一个文字总是需要点击一下才能赋值给v-model

3 回复

这个是不是BUG给个回复阿,有没有别的方式实现的

更多关于uni-app 半屏手写输入文字时,最后一个文字总是需要点击一下才能赋值给v-model的实战教程也可以访问 https://www.itying.com/category-93-b0.html


官方一点回应都没有

在 uni-app 中,半屏手写输入(通常指通过 input 组件的 confirm-type 或自定义键盘实现)时,最后一个文字需要点击确认才能赋值给 v-model,这是由输入法的默认行为导致的。以下是原因和解决方案:

原因分析

  1. 输入法机制:半屏手写输入时,输入法通常会在用户完成手写后,将文字暂存于输入法缓冲区,直到用户点击“确认”或“完成”按钮,才将最终内容提交给输入框。这导致 v-model 绑定的数据在点击前无法实时更新最后一个文字。
  2. 事件触发时机v-model 在 uni-app 中基于 input 事件更新数据,但手写输入法的 input 事件可能在点击确认后才触发,造成数据延迟。

解决方案

1. 使用 @confirm 事件手动更新数据

在手写输入完成后,通过 @confirm 事件(或键盘的完成按钮)强制更新 v-model 数据。示例:

<template>
  <input 
    v-model="inputValue" 
    @confirm="handleConfirm" 
    confirm-type="done" 
    placeholder="手写输入"
  />
</template>
<script>
export default {
  data() {
    return {
      inputValue: ''
    };
  },
  methods: {
    handleConfirm(e) {
      this.inputValue = e.detail.value; // 确保数据同步
    }
  }
};
</script>

2. 结合 [@input](/user/input)[@blur](/user/blur) 事件

在输入过程中实时更新数据,并在输入框失去焦点时(如点击完成)补全最后一次输入:

<input 
  v-model="inputValue" 
  [@input](/user/input)="onInput" 
  [@blur](/user/blur)="onBlur" 
/>
<script>
export default {
  methods: {
    onInput(e) {
      this.inputValue = e.detail.value;
    },
    onBlur() {
      // 可在此处处理最后未确认的输入内容
      this.inputValue = this.inputValue.trim(); // 示例:去除空格
    }
  }
};
</script>
回到顶部