2

問題:テキストエリア内の文字数をカウントしてコンソールに出力する JavaScript 関数があります。maxlengthテキストエリアにも設定しました。
問題は、私sumとテキストエリアmaxlengthが一致しない場合があることです。

たとえば、テキストエリアは入力をブロックしますが、合計変数は、まだ文字が残っていることを示します。特に、高速で入力したり、複数の文字を同時に挿入したりする場合に顕著です。

どうすればこれを解決できますか? ありがとう


HTML:

<textarea maxlength="100"></textarea>

Javascript:

var inputArea = $('textarea');
inputArea.keyup(function(){
   var sum = 100 - inputArea.val().length;
console.log(sum);
});

JSFiddle : http://jsfiddle.net/RnTHJ/3/

4

3 に答える 3

1

キープレスを試してみてください。動作します:http://jsfiddle.net/RnTHJ/4/

ただし、変更イベントを使用するのが最善です。

編集:

キーダウンを使用して、毎回入力の長さから再割り当てするのはどうですか。(フィドル)

var inputArea = $('textarea.test');

var sum = 100;

inputArea.keydown(function (evt) {
    var evt = window.event ? window.event : e;
    var k = evt.keyCode ? evt.keyCode : e.which;

    if(k>48) { 
        if(sum>0) sum--;
    }
    else {
         if(sum<100) sum++;   
    }

    $(this).siblings().text(sum);
});

サンプルとして、ランダムなケース 48 のみをチェックします...可能であれば、すべてのアルファベットと数字をチェックできます。キーコードで明示的にチェックされるバックスペース。

于 2013-03-29T03:14:51.750 に答える
1

非常に多くの「キーアップ」イベントを発生させる可能性が高いため、高速で入力したり、一度に複数の文字を入力したりすると、イベントが発生した順序で終了するとは限らず、最終的に数文字前の合計になります。

短いタイムアウトを試して、新しいタイムアウトを開始するたびにタイムアウトをキャンセルすることをお勧めします。何かのようなもの:

var timeoutVariable;
var inputArea = $('textarea');
inputArea.keyup(function(){
   window.clearTimeout(timeoutVariable);
   timeoutVariable = setTimeout(runSum(),100);
});

function runSum() {
   var sum = 100 - inputArea.val().length;
   console.log(sum);
}

http://jsfiddle.net/RnTHJ/8/

于 2013-03-29T03:17:27.593 に答える
0

これが古いスレッドであることは知っていますが、私の経験では一致しない唯一の理由は、改行文字によるものです。ほとんどの人が期待するように、最大​​長の検証に対して実際には 2 文字 (\r\n) としてカウントされるフィールドで Enter/Return キーを押すと、1 文字 (\n) だけではありません。多分それはあなたが持っているカウントが一致しないという問題ですか?

于 2015-08-22T18:45:01.243 に答える