小程序textarea文本域字数控制---并显示已输入字数

有时候我们在写项目的时候,用到input或者textarea的时候,可能需要对输入的字数进行一个限制和显示,效果图如下:
在这里插入图片描述
输入文字后的效果图是这样的:
在这里插入图片描述
下面闲话少说 把这个小功能分享给大家,先是wxml:

<view class="conts">
    <textarea class="areas" placeholder='空空如也,快点评论吧' minlength="{{min}}" maxlength="{{max}}" bindinput="inputs"> 
        <text class="currentWordNumber">{{currentWordNumber}}/{{max}}</text>
        <text class="hint">{{texts}}{{num}}{{textss}}</text>
    </textarea>
</view>

然后wxss:

.conts{
  width: 750rpx;
  height: auto;
  border: 1rpx soldi red;
  margin-top: 30rpx;
}
.areas{
  height:152rpx;
  font-size: 30rpx;
  text-indent: 28rpx;
  border: 1rpx solid gainsboro;
  padding-top: 30rpx;
  margin: 0 auto;
  overflow: hidden;   
  position: relative; 
}
.currentWordNumber{
  font-size: 28rpx;
  color: gray;
  position: absolute;
  left: 480rpx;
  top: -6rpx;
}
.hint{
   font-size: 28rpx;
   position: absolute;
   top: 130rpx;
   left: 320rpx;
   color: #FF6600;
}

最后是js:

Page({
  data: {
    texts: "至少需要15个字",
    min: 15,//最少字数
    max: 520, //最多字数 (根据自己需求改变) 
    currentWordNumber:0
  },

  //字数限制  
  inputs: function (e) {
    // 获取输入框的内容
    var value = e.detail.value;
    // 获取输入框内容的长度
    var len = parseInt(value.length);
    console.log(len)
    //最少字数限制
    if (len <= this.data.min)
      this.setData({
        texts: "至少还需要",
        textss: "字",
        num:this.data.min-len
      })
    else if (len > this.data.min)
      this.setData({
        texts: " ",
        textss: " ",
        num:''
      })

    this.setData({
      currentWordNumber: len //当前字数  
    });
    //最多字数限制
    if (len > this.data.max) return;
    // 当输入框内容的长度大于最大长度限制(max)时,终止setData()的执行

    console.log(this.data)
  }
})

好了,简单的小功能就实现了,虽然只是个简单的功能,但是对于提高用户体验还是很有必要的。对大家有帮助,可以点个关注!

### 微信小程序 van-field 文本域使用问题解决方案 在微信小程序开发中,`van-field` 是 Vant WeApp 组件库提供的一种常用表单组件。当 `type="textarea"` 时,可能会遇到一些常见的兼容性和功能限制问题。以下是针对这些问题的具体分析和解决方案。 #### 1. **iOS 端 textarea 显示异常** 在 iOS 设备上,可能出现以下两种情况: - **问题表现**: 当 `van-field` 设置为 `type="textarea"` 后,在某些场景下,输入框的内容会浮于页面顶部,上下滚动时消失;或者回显数据的高度未完全展开。 - **原因分析**: 这种现象可能源于微信小程序中原生组件的渲染机制以及 iOS 对其的支持不足[^2]。 - **解决方案**: - 添加一个布尔变量控制组件的显示状态,通过条件渲染 (`wx:if`) 切换 `<text>` 和 `<van-field>` 的展示方式。 - 示例代码如下: ```html <!-- WXML --> <block wx:if="{{showKey}}"> <van-field type="textarea" value="{{value}}" placeholder="请输入内容..." /> </block> <text wx:else>占位符</text> ``` ```javascript // JS Page({ data: { showKey: false, value: '' }, onLoad() { this.setData({ showKey: true }); setTimeout(() => { this.setData({ value: '初始值' }); // 动态赋值避免高度计算错误 }, 0); } }); ``` --- #### 2. **placeholder 换行显示** 如果需要让 `van-field` 中的 `placeholder` 实现多行显示,则可以通过自定义 CSS 样式来调整。 - **方法一**: 修改 `::placeholder` 伪类样式手动设置换行字符 `\n` 或者 HTML 转义序列 ` `[^1]。 - **示例代码**: ```css /* WXSS */ ::placeholder { white-space: pre-wrap; } .custom-placeholder { line-height: 1.5em; word-break: break-all; } ``` ```html <!-- WXML --> <van-field class="custom-placeholder" type="textarea" placeholder="第一行\n第二行" /> ``` --- #### 3. **最大字数限制** 对于 `textarea` 存在的最大字数限制问题,通常是因为默认设置了 `maxlength` 属性所致[^3]。 - **解决办法**: 移除或重新配置该属性即可解除此约束。 - **示例代码**: ```html <!-- WXML --> <van-field type="textarea" maxlength="-1" bindinput="onInput" placeholder="无字数限制..." /> <!-- JS --> onInput(e) { console.log('当前输入:', e.detail.value); } ``` --- #### 4. **双向绑定失效** 若发现 `van-field` 的值未能实时同步更新至 Vue 数据模型中,可以尝试采用事件监听的方式完成手动绑定逻辑处理[^4]。 - **修正后的写法**: ```html <!-- WXML --> <van-field :value="value" placeholder="支持动态绑定..." @input="handleInputChange" /> <!-- JS --> handleInputChange(event) { const newValue = event.mp.detail || ''; this.setData({ value: newValue }); } ``` --- #### 5. **表格滚动适配优化 (扩展)** 虽然题目未提及具体需求,但如果涉及复杂布局比如嵌套 table 结构下的滚动条管理,也可以参考类似 `.row-class:nth-child()` 定义背景渐变色块提升用户体验[^5]。 ```css /* WXSS */ .row-class:nth-child(odd) { background-color: #f9fafb; } ``` --- ### 总结 综上所述,针对微信小程序中 `van-field` 类型为 `textarea` 的常见痛点提供了多种应对策略,包括但不限于跨平台差异修复、占位提示增强、长度管控松绑等方面的技术手段。希望上述指导能够帮助开发者快速定位妥善解决问题。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值