1

だから私はテキストフィールドを頼りに文字をやっています。キーを押したときに文字数を更新する必要があります(キーアップではありません)。問題は、jqueryの.keydown()メソッドでは、文字が入力される前にカウンターが更新されるため、カウンターは常に実際のカウントより1キー押されることです。キーを押したときにカウントを変更するにはどうすればよいですか?ただし、文字が入力されるのを待ちますか?

ありがとう!

4

3 に答える 3

9

setTimeoutここで動作するようです:

$('input').keydown(function(e) {
    var $this = $(this);
    setTimeout(function() {
        var text = $this.val();
        console.log(text.length);
    }, 0);
});
于 2012-07-11T15:12:48.103 に答える
9

.keyup()代わりに使用してください。キーを離すとトリガーされるので、カウンターが増えます。

ドキュメントから:

keyupイベントは、ユーザーがキーボードのキーを離したときに要素に送信されます。任意の要素にアタッチできますが、イベントはフォーカスのある要素にのみ送信されます。

他のイベントと同じように使用します。

$('input').keyup(function(e) {
    var text = $(this).val();
    console.log(text.length);
});

押されたキーの数ではなく、(上記の例のように)テキストボックスの文字数を必ず数えてください。たとえば、Ctrl+Cを押すと、2つの余分な文字がカウントされますが、実際には何も入力に入力されません。


jQuery 1.7以降を使用している場合は、次を使用してください.on()

$('input').on('keyup', function(e) {
    // Do your magic
});
于 2012-07-09T20:53:46.170 に答える
2

簡単な例:

var MAX_CHARACTERS = 60;
$('textarea').bind('keyup keydown', function() {
    var $element = $(this);
    if($element.val().length > MAX_CHARACTERS) {
        $element.val($element.val().substring(0, MAX_CHARACTERS));
    }
    $('.counter').val(MAX_CHARACTERS - $element.val().length);
});

デモ

于 2012-07-09T21:23:15.700 に答える