所以我正在对文本字段进行字符计数。我需要更新按键(不是按键)上的字符数。问题在于,使用 jquery 的.keydown()
方法,它会在输入字符之前刷新计数器,因此计数器总是比实际计数落后 1 个按键。如何在按键时更改计数,但等待输入字符?
谢谢!
所以我正在对文本字段进行字符计数。我需要更新按键(不是按键)上的字符数。问题在于,使用 jquery 的.keydown()
方法,它会在输入字符之前刷新计数器,因此计数器总是比实际计数落后 1 个按键。如何在按键时更改计数,但等待输入字符?
谢谢!
改为使用.keyup()
。它在释放键时触发,因此计数器将增加。
从文档中:
当用户在键盘上释放一个键时,keyup 事件被发送到一个元素。它可以附加到任何元素,但事件仅发送到具有焦点的元素。
您可以像使用任何其他事件一样使用它:
$('input').keyup(function(e) {
var text = $(this).val();
console.log(text.length);
});
确保计算文本框中的字符数(如上例所示),而不是按下的键数。例如,按Ctrl+C将导致计算两个额外的字符,但实际上没有一个字符输入到输入中。
如果您使用的是 jQuery 1.7+,请使用.on()
:
$('input').on('keyup', function(e) {
// Do your magic
});
setTimeout
似乎在这里工作:
$('input').keydown(function(e) {
var $this = $(this);
setTimeout(function() {
var text = $this.val();
console.log(text.length);
}, 0);
});
一个简单的例子:
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);
});