为了发送短信,我整理了以下脚本来计算文本区域中使用的字符。
该代码允许服务提供商发送的最大字符数,并且还考虑了特殊字符 ( {}^\/|~€\r
) 占用的空间是常规字符的两倍。这是通过将每个字符转换为其等效的 ascii 并将其与已识别字符的值数组进行比较来完成的。然后更新屏幕上的文本(#remaining、#messages)以反映正在使用的字符数。
该脚本在 FF 和 Chrome(最新)以及 IE9 中运行良好,但在 IE8 中完全失败。它的失败在于屏幕上的文本没有更新或更改,并且没有出现错误。它根本没有效果。
第二个问题是,在任何浏览器上,最终的 ascii 比较 - 128,€ 符号 - 不会被拾取。我可以在文本框中输入“€”,计数只会增加 1,而不是 2。128 是正确的值,它是.charCodeAt()
函数在将 € 传递给它时生成的值。根据需要,所有其他符号都增加 2。
那么:为什么这段代码在 IE8 中会失败,为什么最后的 ascii 比较会失败呢?
所有帮助表示赞赏。
$('#sms-message').keyup(function(){
$('#msg-validation').hide();
var chars = $(this).val(),
arr_chars = chars.split(''),
remaining = $('#remaining'),
messages = $('#messages'),
count = 0;
$.each(arr_chars, function(i, l){
var ascii = l.charCodeAt(0),
arr = [13, 47, 92, 94, 123, 124, 125, 126, 128];
if($.inArray(ascii, arr) !== -1) { count = count + 2; }
else { count = count + 1; }
});
var units = Math.ceil(count / 160),
remaining_chars = 459 - count;
remaining.text(count + ' characters (' + remaining_chars + ' remaining)');
messages.text(units + ' text unit(s)');
if(remaining_chars < 0) {
$(remaining).css('color', 'red');
}
else {
$(remaining).css('color', 'black');
}
});