当我在textarea中输入第一个字符时,它仍然显示0,count为第二个字符显示1。不知道为什么?为此,我使用了keydown事件。
$(".textArea").keydown(updateCount());
function updateCount() {
count = $(".textArea").val().length;
this.$countDiv.text(count + " of 240");
};
发布于 2018-02-01 20:52:34
使用input
事件。这将涵盖对文本框值的所有更改,包括复制和粘贴等(即使使用鼠标)……
$("#text").on("input", updateCount);
function updateCount() {
count = $("#text").val().length;
$("#count").text(count + " of 240");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<textarea id="text"></textarea>
<div id="count"></div>
还有一些其他问题,比如您执行的是updateCount
函数,而不是将其分配给事件处理程序(在函数名后面有()
。如果你删除了它,那么它就变成了对函数的引用,而不是立即执行它)。
我还为textarea元素使用了id,而不是类,但这只是我的情况-如果一个类在您的场景中工作,那么它就很好。
发布于 2018-02-01 20:48:40
您需要将函数传递给$.keydown
,而不是执行的结果:
$(".textArea").keydown(updateCount);
function updateCount() {
count = $('.textArea').val().length;
this.$countDiv.text(count + ' of 240');
}
传递执行结果时,必须在keydown
处理前执行。因为keydown
依赖于updateCount
的执行结果,所以updateCount
总是在keydown
之前执行,所以您在keydown
之前获得了字符串状态的长度。
发布于 2018-02-01 20:49:14
对于您试图实现的用例,keydown事件是不够的。您必须使用keyup
事件。至此,按键完成。
致以问候。
https://stackoverflow.com/questions/48563069
复制相似问题