【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>

完美解决~~

相关推荐
程序员大阳7 小时前
副队长JavaScript教程(49)-主动抛出异常与错误类型
javascript·异常处理·error·throw·错误类型
hhhjhl7 小时前
Protobuf.js 跨端三方库仓颉适配全流程
javascript·网络·udp
Flynt10 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
slongzhang_11 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
liyi_hz200814 小时前
O2OA(翱途) V10.1 即将发布|功能再升级,安全再加固,协同更高效!
java·javascript·windows·开源软件
anyup14 小时前
uView Pro X 1.0.0 发布:全面支持 uni-app x 蒸汽模式,80+ 组件
前端·uni-app·ai编程
志尊宝15 小时前
AI原生前端开发(029):AI辅助的文档自动生成
javascript·人工智能·ai-native
一个游离的指针16 小时前
ES6新特性:let、const、块级作用域
开发语言·javascript·es6
Hilaku16 小时前
删了一个没用的 console.log,生产环境直接崩了!
前端·javascript·程序员
真上帝的左手16 小时前
2. 编程语言-JavaScript
开发语言·javascript