为了发送短信,我将以下脚本放在一起计算textarea中使用的字符数。
代码允许服务提供商发送的最大字符数,并且还考虑特殊字符({}^\/|~€\r
)占用的空间是常规字符的两倍。这是通过将每个字符转换为其ascii等效字符并将其与已识别字符的值数组进行比较来完成的。然后更新屏幕上的文本(#remaining,#message)以反映正在使用的字符数。
该脚本在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');
}
});
答案 0 :(得分:0)
对您声明的所有变量使用“var”,并通过添加“var”更新代码并尝试。我认为这肯定会奏效。
$('#sms-message').keyup(function(){
$('#msg-validation').hide();
var chars = $(this).val(),
var arr_chars = chars.split(''),
var remaining = $('#remaining'),
var messages = $('#messages'),
var count = 0;
$.each(arr_chars, function(i, l){
var ascii = l.charCodeAt(0),
var 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),
var 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');
}
});