我正在尝试使用form
和textarea
创建博客评论span
,向用户显示可以在文本区域中引入的剩余字符数。< / p>
所以我有这样的表格:
<form action="comment.php" method="POST" accept-charset="utf-8">
<textarea name="comment" id="comment" rows="4" cols="56"></textarea>
<input type="submit" value="Post" />
<span id="comment-chars-left">512</span> characters left
</form>
然后我编写了以下jQuery代码:
$('#comment')
.keydown(function(event) {
$('#comment-chars-left').html('' + (512 - $textarea.val().length));
});
问题是,当首先调用键入.keydown
时,会打印剩余字符的数量,然后在textarea
中显示键入的新字符。因此,剩余字符的数量没有正确的值,大一个单位。为了完成这项工作,应在插入新角色后调用.keydown
。
如何解决此问题?
答案 0 :(得分:4)
改为使用keyup()
。
您还需要绑定一些其他事件。
使用bind('keyup paste drop')
。
keyup
,paste
如果有人在您的textarea
中粘贴文字,drop
如果有人在您{{1}中删除了一大块文字}}
答案 1 :(得分:1)
您可以使用$('#comment').keyup()
:)
答案 2 :(得分:0)
为什么不使用.keyup()
?
$('#comment')
.keyup(function(event) {
$('#comment-chars-left').html('' + (512 - $textarea.val().length));
});
答案 3 :(得分:0)
尝试.keyup
事件
答案 4 :(得分:0)
使用keypress
事件,当键生成一个字符时,而不是按下该键时,会发生这种情况。 (例如,shift键会导致keydown
事件但不会导致keypress
事件,并且重复的键会导致每个字符发生keypress
个事件,但只会发生keydown
个事件。第一个。)
使用setTimeout
方法启动一个计时器,该计时器将在处理完事件后运行代码:
$('#comment')
.keypress(function() {
window.setTimeout(function(){
$('#comment-chars-left').html('' + (512 - $textarea.val().length));
}, 0);
});