だから私はテキストフィールドを頼りに文字をやっています。キーを押したときに文字数を更新する必要があります(キーアップではありません)。問題は、jqueryの.keydown()
メソッドでは、文字が入力される前にカウンターが更新されるため、カウンターは常に実際のカウントより1キー押されることです。キーを押したときにカウントを変更するにはどうすればよいですか?ただし、文字が入力されるのを待ちますか?
ありがとう!
だから私はテキストフィールドを頼りに文字をやっています。キーを押したときに文字数を更新する必要があります(キーアップではありません)。問題は、jqueryの.keydown()
メソッドでは、文字が入力される前にカウンターが更新されるため、カウンターは常に実際のカウントより1キー押されることです。キーを押したときにカウントを変更するにはどうすればよいですか?ただし、文字が入力されるのを待ちますか?
ありがとう!
setTimeout
ここで動作するようです:
$('input').keydown(function(e) {
var $this = $(this);
setTimeout(function() {
var text = $this.val();
console.log(text.length);
}, 0);
});
.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
});
簡単な例:
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);
});