SMS字符数

问题描述:

如何使用jquery创建n个短信计数?SMS字符数

像这个代码只有3短信计数。我需要使用像这个相同的代码N个短信计数。 怎么办?

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

的HTML:

<b id="smsCount"></b> SMS (<b id="smsLength"></b>) Characters left 
<textarea id="smsText"></textarea> 

(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)); 

我试过短信字符数。但是这个代码只有3个数字。我需要n个短信计数。就像创建超过100或200个短信一样。如果有人知道手段发送查询。

+1

您必须向我们展示您尝试过的方式以帮助您解决问题。 – avcajaraville 2014-09-25 12:10:41

在这段代码中,笔者给阵列,最大长度只有3个SMS:

lengths: { 
    ascii: [160, 306, 459], 
    unicode: [70, 134, 201] 
} 

this thread,计算公式如下:

  • 一个普通的ASCII短信将有160可用字符
  • 如果你传递给2个短信,发送2个短消息作为1个消息(我认为是UDH)需要一个特定的头部。这个头文件每个短信需要7个字符。所以,2个SMS具有(160 - 7)+(160 - 7)= 153 + 153 = 306可用字符
  • 相同的机制为unicode的,但最大长度是70和UDH需要3个字符

所以你必须开发一种计算这个最大可用字符的短信给定数量的功能,我建议:

function calculateSmsMaxLength (isUnicode, writtenSmsNb) { 

       if (isUnicode) { 
        if (writtenSmsNb == 0) { 
         return 70; 
        } else { 
         return (70 * (writtenSmsNb + 1)) - ((writtenSmsNb + 1) * 3); 
        } 
       } else { 
        if (writtenSmsNb == 0) { 
         return 160; 
        } else { 
         return (160 * (writtenSmsNb + 1)) - ((writtenSmsNb + 1) * 7); 
        } 
       } 
      } 

isUnicode:真的还是假的,这取决于短信

writtenSmsNb的内容:数量的短信你想计算最大avai标签字符。

最后,这是... mmmh代码,可以说5个最大的手机短信:

(function($){ 
$.fn.smsArea = function(options){ 

    var e = this, 
     cutStrLength = 0, 

     s = $.extend({ 

      cut: true, 
      maxSmsNum: 5, 
      interval: 400, 

      counters: { 
       message: $('#smsCount'), 
       character: $('#smsLength') 
      }, 

      calculateSmsMaxLength : function (isUnicode, writtenSmsNb) { 

       if (isUnicode) { 
        if (writtenSmsNb == 0) { 
         return 70; 
        } else { 
         return (70 * (writtenSmsNb + 1)) - ((writtenSmsNb + 1) * 3); 
        } 
       } else { 
        if (writtenSmsNb == 0) { 
         return 160; 
        } else { 
         return (160 * (writtenSmsNb + 1)) - ((writtenSmsNb + 1) * 7); 
        } 
       } 
      } 
     }, 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; 
      } 

      for(var sCount = 0; sCount < s.maxSmsNum; sCount++){ 

       smsType = s.calculateSmsMaxLength(isUnicode, sCount); 
       cutStrLength = smsType; 
       if(smsLength <= smsType){ 

        smsCount = sCount + 1; 
        charsLeft = smsType - 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)); 


//Start 
$(function(){ 
    $('#smsText').smsArea({maxSmsNum:5}); 
}) 

只要改变这两个“maxSmsNum”值来设置要允许最大短信。有关信息,理论上最大值为255,但实际上,发送时最多为6到8 sms。