2

为了发送短信,我整理了以下脚本来计算文本区域中使用的字符。

该代码允许服务提供商发送的最大字符数,并且还考虑了特殊字符 ( {}^\/|~€\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');
    }
});
4

1 回答 1

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');
    }
});
于 2013-05-03T11:41:39.647 回答