IE8中的JQuery字符计数器失败

时间:2012-12-12 12:24:25

标签: jquery

为了发送短信,我将以下脚本放在一起计算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');
    }
});

1 个答案:

答案 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');
    }
});