火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

文本框实时词数统计:事件与分词

发布于 9小时前
2

输入时不更新计数,通常是三个环节中的一个断掉:函数名与绑定名不一致、事件选错、分词逻辑过于粗糙。

键盘输入场景
计数依赖事件、分词与元素访问三处协同

绑定

const box = document.querySelector('#content');
const out = document.querySelector('#count');
box.addEventListener('input', () => {
  out.textContent = countWords(box.value);
});

用 input 事件而不是按键抬起事件。前者覆盖粘贴、拖拽输入与输入法组合过程,后者会漏掉非键盘输入。

分词

function countWords(text) {
  const parts = text.trim().split(/\s+/);
  return parts[0] === '' ? 0 : parts.length;
}

先去掉首尾空白再切分,空串单独返回 0,否则空输入会被算成一个词。中英混排时按空白切分不成立,需要额外按字符统计并分开呈现。

元素访问时机

脚本放在文档头部且没有延迟执行时,取元素得到空值。把脚本放在文档末尾,或使用 defer 属性。

细节

  • 高频输入时做一次节流,避免每次按键都做全量切分。
  • 把结果写进带 aria-live 的容器,读屏能播报变化。
  • 设定上限时给出可见提示,而不是静默截断。

常见问题(FAQ)

输入后计数不变?
确认监听的是 input 事件,且绑定的函数名与定义一致。
空输入框显示 1?
切分前先去掉首尾空白,并对空串单独返回 0。
粘贴内容不计数?
按键事件监听不到粘贴,改用 input 事件。
中文怎么统计?
按空白切分不适用,需要按字符数单独统计并与词数分开显示。
脚本取不到元素?
脚本执行早于文档解析,放到文档末尾或加 defer。
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026