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个短信一样。如果有人知道手段发送查询。
答
在这段代码中,笔者给阵列,最大长度只有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。
您必须向我们展示您尝试过的方式以帮助您解决问题。 – avcajaraville 2014-09-25 12:10:41