JavaScript 是实现字数超限变红警示的可靠方案,通过监听 input、compositionstart/end 事件动态添加 over-limit 类,并结合 scrollWidth 检测视觉溢出,辅以 aria 属性提升可访问性。
纯 CSS 无法实现“字数超出时变红”的警示效果——:invalid 伪类对 <textarea> 仅在违反 required、maxlength 等表单约束时生效,且只影响表单校验状态,不自动触发颜色变化;真正可控、稳定的做法是用 JavaScript 实时检测并添加警示类。
监听 input 事件(覆盖粘贴、拖入、语音输入等所有方式),对比当前字符数与限制值,超限时给元素加 class="over-limit",再用 CSS 定义红色边框或文字色:
maxlength 属性作为基础拦截:<textarea maxlength="100"></textarea>
const ta = document.querySelector('textarea');ta.addEventListener('input', () => {
const max = parseInt(ta.getAttribute('maxlength'));
if (ta.value.length > max) {
ta.classList.add('over-limit');
} else {
ta.classList.remove('over-limit');
}
});
.over-limit { border-color: #e53935 !important; color: #e53935; }
当限制依据是“显示宽度”而非字符数(比如中英文混排、字体不等宽),需用 DOM 方法测量:
element.scrollWidth > element.clientWidth 判断是否实际溢出容器ResizeObserver 监听尺寸变化,避免在 scroll 或 resize 中高频计算if (el.scrollWidth > el.clientWidth) {el.classList.add('warn-overflow');
}
用户打拼音未上屏时,input 不触发,导致提示滞后。需补充监听 compositionstart 和 compositionend:
ta.addEventListener('compositionstart', () => isComposing = true);ta.addEventListener('compositionend', () => { isComposing = false; updateWarning(); });input 回调中加判断:if (!isComposing) updateWarning();
前端警示只是提示,不能替代服务端验证。同时注意体验细节:
if (ta.value.length > max) { event.preventDefault(); alert('超出字数限制'); }
aria-invalid="true" 和 aria-describedby 关联提示文案tlwdr7650路由器没有wps按钮(tlwdr7650路由器没有wps按钮怎么办)
tlwdr7632扩展器电脑怎么设置(tlwdr7632扩展器电脑设置方法)
tlwda6332re安装教程(tlwda6332re如何安装)
tlwdr7632扩展器手机怎么设置(tlwdr7632扩展器手机设置方法)
tlxdr3010怎么设置网速快(tlxdr3010网速快设置方法)
tlwdr5620易展版怎么克隆(tlwdr5620易展版克隆方法)