1

ユーザーがテキストを入力できる単純なHTMLフォームがあり、SMSゲートウェイを介してSMS/TXTメッセージとして送信されます。ユーザーはメッセージテキストをテキストエリアに入力します。

<textarea rows="10" cols="40" id="smsbody" validate = "required:true" name="MessageBody"></textarea>

好きなだけテキストを入力できますが、各SMSは160文字に制限されているため、入力した文字数と、これが使用するSMSクレジットの数の両方を示す文字カウンターを表示したいと思います。クレジットの計算式は、入力されたクレジットの総数に基づいています。メッセージが160文字を超えると、複数のメッセージ部分に分割されます。各メッセージ部分の長さは153文字に制限されています(ヘッダーの場合は7バイト)。したがって、160文字のメッセージは1クレジット、306文字は2クレジット、459文字は3クレジットというようになります。

理想的には、これを次の形式で表示したいと思います。

0文字、1 SMSメッセージ200文字、2SMSメッセージ

私はすでにjQueryを使用しているので、jQueryベースのソリューションも使用できてうれしいです。

どうもありがとう、スティーブ

4

1 に答える 1

5

このようなもの?

試してみてください: http://jsfiddle.net/kG8U2/2

1 つのメッセージの場合は 160 文字ですが、複数の場合、メッセージの数は文字を 153 で割ったものになるという点で正しく理解していると思います。

HTML

<textarea rows="10" cols="40" id="smsbody" validate = "required:true" name="MessageBody"></textarea>
<div id='message'>
    <span id='char'>0</span> characters,
    <span id='msgs'>0</span> SMS message(s),
    <span id='remg'>160</span> remaining
</div>​​​​

jQuery

var $chars = $('#char');
var $msgs = $('#msgs');
var $remg = $('#remg');

$('#smsbody').keyup(function(evt) {
    var len = this.value.length;
    $chars.text(len);
    if(len <= 160) {
        $msgs.text(1);
        $remg.text(160 - len);
    } else {
        var multi = Math.ceil((len/153)) ;
        $msgs.text(multi);
        $remg.text((multi * 153) - len);
    }
});​

編集: 1 文字ずれていた不具合を修正し、楽しみのために残りのカウンターを追加しました。

于 2010-07-13T12:44:25.850 に答える