0

SMSアプリケーションの入力文字バイト数をカウントしたい。ASCII が入力された場合は 1 バイトとカウントされ、非 ASCII の場合は 2 バイトとカウントされます。合計文字バイトが 80 バイトを超える場合、スクリプトは警告を発し (「80 バイトを超えました」)、その後、80 バイト未満になるまで最後からカットする必要があります。ただし、このスクリプトでは cutBylen() 関数が機能していないようです。警告するだけで、文字列を切断しません。誰かが問題がどこにあるか教えてもらえますか? どうもありがとうございました。

                <script>
                    function countBytes( str ) {
                        var count = 0;
                        for ( var i = 0; i < str.length; i++ ) {
                            var onechar = str.charAt( i );
                            if ( str.charCodeAt( i ) >= 128 ) {
                                count += 2;
                            } else if ( onechar != '\r' ) {
                                count++;
                            }
                        }
                        return count;
                    }
                </script>
                <script>
                    function cutByLen( str, byteLen ) {
                        var tmpStr = str;
                        while (countBytes( tmpStr ) > byteLen) {
                            var len = tmpStr.length;
                            tmpStr = tmpStr.substr( 0, len - 1 );
                        }
                        return tmpStr;
                    }
                </script>
                <script>
                    $(document).ready(function() {

                        $("#smstext1").keyup(function(){
                            var text = $(this).val();
                            var byteLen = countBytes(text);
                            var len = text.length;

                            if (byteLen >80){
                                alert('You have reached over 80bytes');

                                var tmpStr = cutByLen( text, byteLen );

                                $(this).val(tmpStr);    

                            }


                        });
                    });
                </script> 
4

1 に答える 1

2

あなたが持っている

var tmpStr = cutByLen( text, byteLen );

wherebyteLenはテキストの長さであるため、文字列がそれ自体よりも長い場合は文字列をカットしますが、明らかに何もしません。あなたがおそらく意味していたのは

var tmpStr = cutByLen( text, 80 );
于 2013-05-25T12:18:46.780 に答える