2

SMS を送信する目的で、テキストエリアで使用される文字をカウントする次のスクリプトをまとめました。

このコードは、サービス プロバイダーが送信できる最大文字数を許可し、{}^\/|~€\r通常の文字の 2 倍のスペースを必要とする特殊文字 ( ) も考慮しています。これは、各文字を対応する ASCII に変換し、それを識別された文字の値の配列と比較することによって行われます。次に、画面上のテキスト (#remaining、#messages) が更新され、使用されている文字数が反映されます。

このスクリプトは、FF と Chrome (最新)、および IE9 では問題なく動作しますが、IE8 では完全に失敗します。画面上のテキストが更新または変更されず、エラーが表示されないという点で失敗します。それは単に効果がありません。

2 つ目の問題は、どのブラウザーでも最終的な ASCII 比較 (128、€ 記号) が取得されないことです。テキスト ボックスに「€」と入力すると、カウントは 2 ではなく 1 だけ増加します。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 に答える