【uniapp】textarea maxlength字数计算不准确的问题

背景

一个非常常见的功能, 多行文本输入框内增加maxlength最大字数限制500字。但是当我们多行输入并且有换行时,比如到493字时却无论如何输入不了。是因为maxlength计算时,把换行也计算进去了,并且换行符 \n 被计算为 2 个字符textarea 可能会将换行符 \n 计算为2个字符,导致字数限制比预期更早达到上限。

解决办法

监听 input 事件,手动计算实际字符数

你可以使用 @input 监听输入事件,手动去掉 换行符和特殊字符 之后再计算长度,确保用户可以真正输入 500 个字符。

javascript 复制代码
<template>
  <textarea 
    v-model="text" 
    :maxlength="500" 
    @input="handleInput"
    placeholder="请输入内容"
  ></textarea>
  <p>{{ text.length }}/500</p>
</template>

<script>
export default {
  data() {
    return {
      text: ""
    };
  },
  methods: {
    handleInput(event) {
      let value = event.detail.value;
      // 处理换行符问题,确保换行符不多计算
      value = value.replace(/\r\n/g, "\n"); // 统一换行符
      value = value.replace(/\n/g, " "); // 换行符改为空格,不占字符

      if (value.length > 500) {
        this.text = value.substring(0, 500);
      } else {
        this.text = value;
      }
    }
  }
};
</script>

完美解决~~

相关推荐
尾善爱看海2 小时前
Vue 面试收官篇:SSR、性能优化落地、30 道高频面试题精讲(附标准答案)
前端·javascript·vue.js·面试·vue
李明卫杭州7 小时前
React 复合事件系统对比解析
前端·javascript·react.js
LEE8 小时前
前端转型全栈 01:数据建模,前端最大的盲区
前端·javascript·后端
雪芽蓝域zzs8 小时前
第四十七节:驾驶舱大屏 ECharts 图表集成
前端·javascript·vue.js
梦醒沉醉9 小时前
7、表达日期和时间(前朝遗老Date)
javascript
雪芽蓝域zzs10 小时前
第四十九节:TagsView 右键菜单(带三角箭头)给每个 tag 增加**鼠标右键菜单**(右键标签弹出:关闭、关闭其他、关闭全部)
前端·javascript·vue.js
এ慕ོ冬℘゜10 小时前
从零开发移动端医院挂号页面:适配、交互与前端实现详解
前端·javascript
宁渡AI大模型10 小时前
AI 全栈面试新趋势:Vibe Coding、前端、Java 后端高频面试题深度解析|河南宁渡科技有限公司编程教程
java·javascript·人工智能·python·ai大模型
东风微鸣11 小时前
AI依赖更新别裸奔🚨
javascript
研☆香11 小时前
echarts图表的使用方法
javascript