Count characters/sms using jQuery

后端 未结 11 1665
醉酒成梦
醉酒成梦 2020-12-08 17:23

I count characters using NobleCount and the following code:

$(\'#message\').NobleCount(\'#messageInfo\',{
            max_chars: getMaxChars(),
            o         


        
11条回答
  •  执笔经年
    2020-12-08 17:34

    Here is small plugin for you. It is my first jQuery plugin i give it for free ;) you just need to start it with:

    $('#smsText').smsArea();
    

    The HTML:

      SMS () Characters left
     
    

    The Javascript (updated 18.8.2014):

    (function($){
        $.fn.smsArea = function(options){
    
        var
        e = this,
        cutStrLength = 0,
    
        s = $.extend({
    
            cut: true,
            maxSmsNum: 3,
            interval: 400,
    
            counters: {
                message: $('#smsCount'),
                character: $('#smsLength')
            },
    
            lengths: {
                ascii: [160, 306, 459],
                unicode: [70, 134, 201]
            }
        }, options);
    
    
        e.keyup(function(){
    
            clearTimeout(this.timeout);
            this.timeout = setTimeout(function(){
    
                var
                smsType,
                smsLength = 0,
                smsCount = -1,
                charsLeft = 0,
                text = e.val(),
                isUnicode = false;
    
                for(var charPos = 0; charPos < text.length; charPos++){
                    switch(text[charPos]){
                        case "\n": 
                        case "[":
                        case "]":
                        case "\\":
                        case "^":
                        case "{":
                        case "}":
                        case "|":
                        case "€":
                            smsLength += 2;
                        break;
    
                        default:
                            smsLength += 1;
                    }
    
    
                    if(text.charCodeAt(charPos) > 127 && text[charPos] != "€") isUnicode = true;
                }
    
                if(isUnicode){
                    smsType = s.lengths.unicode;
    
                }else{
                    smsType = s.lengths.ascii;
                }
    
                for(var sCount = 0; sCount < s.maxSmsNum; sCount++){
    
                    cutStrLength = smsType[sCount];
                    if(smsLength <= smsType[sCount]){
    
                        smsCount = sCount + 1;
                        charsLeft = smsType[sCount] - smsLength;
                        break
                    }
                }
    
                if(s.cut) e.val(text.substring(0, cutStrLength));
                smsCount == -1 && (smsCount = s.maxSmsNum, charsLeft = 0);
    
                s.counters.message.html(smsCount);
                s.counters.character.html(charsLeft);
    
            }, s.interval)
        }).keyup()
    }}(jQuery));
    

    DEMO: http://jsfiddle.net/t32h0gj4/1/

    NOTE: there are some basic options

    $('#smsText').smsArea({cut:false}); //Do not cut the SMS
    $('#smsText').smsArea({maxSmsNum:2}); //2 SMS Max
    

提交回复
热议问题