ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

input根据字符大小显示组件(只适用于type=text)

2021-06-30 18:04:14  阅读:129  来源: 互联网

标签:字符 default text value fontLength input type change


HTML片段

<template>
    <el-input :value="actualValue" :disabled="disabled" :placeholder="placeholder" @input="change($event,maxLength)">
        <span class="el-input__count" v-if="showLength" slot="suffix"><span class="el-input__count-inner">{{this.fontLength}}/{{maxLength}}</span></span>
    </el-input>
</template>

JS片段

<script>
export default {
    name: 'InputLength',
    model: {
        prop: 'inputValue',
        event: 'change'
    },
    props: {
        //输入的绑定值
        inputValue: {
            type: String,
            default: '',
        },
        disabled: {
            type: Boolean,
            default: false
        },
        placeholder: {
            type: String,
            default: ''
        },
        //限定字符数
        maxLength: {
            type: [String,Number],
            default: 99,
        },
        showLength: {
            type: Boolean,
            default: true,
        },
    },
    data() {
        return {
            fontLength: 0,//输入的字符数
        };
    },
    computed: {
        actualValue() {
            this.change(this.inputValue,this.maxLength)
            return this.inputValue;
        }
    },
    methods: {
        //输入字符判断
        change(v,n){
              let temp = 0
              let value = null;
            try {
                v.split('').forEach((val,i)=>{
                    if(/[\u4e00-\u9fa5]/.test(v[i])) temp +=2
                    else temp += 1
                    if(temp >= n+1) {
                        value = v.substr(0,i);
                        this.$emit('change', value);
                        this.$message.warning("字符已经已达到最大限制!");
                        throw new Error(i)
                    } 
                })
            } catch(i){
                    console.log('获取错误+'+i,v);
            }
            // 实时监听字符大小
            this.fontLength = 0;
            //    直接点击查看时显示的文本
                const fontSize = value?value:v;
                this.$emit('change', fontSize);
                if(fontSize){
                    for (var i = 0; i < fontSize.length; i++) {
                if (v[i].match(/[^\x00-\xff]/ig) != null){
                     //全角
                        this.fontLength += 2; //如果是全角,占用两个字节
                } else{
                    this.fontLength += 1; //半角占用一个字节

                }
            }
                }
        }
    }
}
</script>

页面调用

<InputLength v-model="activityForm.activityName" :maxLength="40" />

 

效果展示

 

标签:字符,default,text,value,fontLength,input,type,change
来源: https://www.cnblogs.com/liyuanfang/p/14955721.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有