uni-app textarea光标位置为什么在内容的前面

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

uni-app textarea光标位置为什么在内容的前面

示例代码:

<textarea @blur="poo" :focus="focus" v-if="isshow"></textarea>

操作步骤:

textarea 先是隐藏不展示,然后点击按钮显示textarea 并且触发焦点

预期结果:

跟安卓一样,光标在内容后面

实际结果:

光变在内容前面

bug描述:

逻辑是 textarea 开始是隐藏起来,点击按钮显示出来并且动态触发焦点focus,如果里面有内容的话,触发焦点后光标在内容的前面,目前ios有这个问题,安卓没有,效果看附件

信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 11
HBuilderX Alpha
HBuilderX版本号 3.8.12
手机系统 iOS
手机版本号 iOS 15
手机厂商 苹果
手机机型 苹果11
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

6 回复

ios 复现了此问题,我看看怎么做个兼容。我用 sectionEnd 没成功,用暂存器实现了,你可以试一试
onClick() {
console.log(3)
this.textShow = !this.textShow
if (this.textShow) {
this.strFocus = true

let temp = this.str  
this.str = ''  

// 光标强制移动到最后  
this.$nextTick(() => {  
    this.str = temp  
    this.$refs.textarea.focus()  
})  

}

什么时候可以修复这个问题

回复 传播星球: 这是某个平台的特性,不是 api 或者组件的问题,目前考虑加入文档中做用户提示。是否在 uniapp 层面做处理,还需要评估,不确定对历史用户影响面有多大,不用的用户兼容方式不同

uni-app 中使用 textarea 组件时,如果光标位置出现在内容的前面,可能是由于以下原因之一:

1. valuev-model 绑定问题

  • 如果你使用 v-modelvalue 绑定数据,确保绑定的数据是字符串类型,并且初始值正确。
  • 如果初始值为空字符串 "",光标会默认出现在最前面。
  • 如果绑定的数据是 nullundefined,可能会导致光标位置异常。

解决方法:

<template>
  <textarea v-model="inputValue" placeholder="请输入内容"></textarea>
</template>

<script>
export default {
  data() {
    return {
      inputValue: "" // 确保初始值为空字符串
    };
  }
};
</script>

2. placeholder 的影响

  • 如果 textarea 的内容为空,且设置了 placeholder,光标可能会默认出现在最前面。
  • 这是浏览器的默认行为,不是 uni-app 的 Bug。

解决方法:

  • 如果不需要 placeholder,可以移除它。
  • 如果需要 placeholder,可以接受光标在最前面的行为,或者通过 JavaScript 动态设置光标位置。

3. 动态设置光标位置

  • 如果你希望光标出现在内容的末尾,可以通过 JavaScript 动态设置光标位置。

解决方法:

<template>
  <textarea ref="myTextarea" v-model="inputValue" placeholder="请输入内容"></textarea>
</template>

<script>
export default {
  data() {
    return {
      inputValue: ""
    };
  },
  methods: {
    setCursorToEnd() {
      const textarea = this.$refs.myTextarea;
      if (textarea) {
        textarea.focus();
        const length = textarea.value.length;
        textarea.setSelectionRange(length, length);
      }
    }
  },
  mounted() {
    this.setCursorToEnd(); // 在组件加载后设置光标到末尾
  }
};
</script>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!