首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >文本区域计算字符长度错误

文本区域计算字符长度错误
EN

Stack Overflow用户
提问于 2018-02-01 20:42:47
回答 5查看 108关注 0票数 0

当我在textarea中输入第一个字符时,它仍然显示0,count为第二个字符显示1。不知道为什么?为此,我使用了keydown事件。

代码语言:javascript
运行
复制
$(".textArea").keydown(updateCount());

function updateCount() {
    count = $(".textArea").val().length;
    this.$countDiv.text(count + " of 240");
};
EN

回答 5

Stack Overflow用户

发布于 2018-02-01 20:52:34

使用input事件。这将涵盖对文本框值的所有更改,包括复制和粘贴等(即使使用鼠标)……

代码语言:javascript
运行
复制
$("#text").on("input", updateCount);

function updateCount() {
    count = $("#text").val().length;
    $("#count").text(count + " of 240");
}
代码语言:javascript
运行
复制
<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,而不是类,但这只是我的情况-如果一个类在您的场景中工作,那么它就很好。

票数 5
EN

Stack Overflow用户

发布于 2018-02-01 20:48:40

您需要将函数传递给$.keydown,而不是执行的结果:

代码语言:javascript
运行
复制
$(".textArea").keydown(updateCount);

function updateCount() {
    count = $('.textArea').val().length;
    this.$countDiv.text(count + ' of 240');
}

传递执行结果时,必须在keydown处理前执行。因为keydown依赖于updateCount的执行结果,所以updateCount总是在keydown之前执行,所以您在keydown之前获得了字符串状态的长度。

票数 0
EN

Stack Overflow用户

发布于 2018-02-01 20:49:14

对于您试图实现的用例,keydown事件是不够的。您必须使用keyup事件。至此,按键完成。

致以问候。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48563069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档