textarea 的 maxlength 属性仅辅助限制,需配合 oninput 实时截断并处理粘贴、输入法组合等场景;Layui 中须手动实现字数统计与校验,表格和 layer.prompt 等特殊场景需定制方案。
单纯写 maxlength="200" 在 Chrome/Firefox 中能拦住部分超长输入,但粘贴、拖入文本、中文输入法「上屏前」都会绕过。Layui 的 layui-textarea 类不干预原生行为,限制逻辑得你来写。
核心是监听 oninput:它在每次按键、粘贴、删除、甚至输入法组合过程中都触发,比 onkeyup 可靠得多(后者捕获不到鼠标粘贴)。
<textarea maxlength="200" oninput="limitText(this, 200)" class="layui-textarea"></textarea>
limitText 函数里不能直接 val = val.substr(0, max) —— 否则用户打「你好」时,拼音还没上屏就截断,输入框会错乱或清空compositionstart 暂停截断,等 compositionend 再检查最终长度setTimeout(() => { /* 读取 value */ }, 0),否则粘贴内容在 paste 回调里还不可见很多代码把计数 <div class="word">0/200</div> 放在 <textarea> 同级,但没给父容器加 position: relative,结果数字飘到页面角落。
Layui 的 .layui-input-block 必须显式设样式:
.layui-input-block { position: relative; }.word { position: absolute; right: 10px; bottom: 8px; font-size: 12px; color: #aaa; }
JS 更新时要用 $(obj).next('.word').text(`${curr}/${max}`),不能写 $('.word') 全局匹配——多个 textarea 会互相覆盖。
.word 元素已存在,否则 .next() 返回空lay-verify 自定义校验,字数检查应放在 form.verify 里,但实时显示仍得靠 oninput
Layui 表格的 edit: "textarea" 是封装过的,不透传 maxlength,也不支持绑定 oninput 或 paste 事件。
想限制字数,必须放弃这个快捷方式,改用 templet 自定义模板:
templet: '<textarea maxlength="100" oninput="limitText(this, 100)"></textarea>'
input 和 paste,并处理 compositionstart/end
off() 再 on(),或用事件委托layer.prompt 不接受 minlength 或 maxlength 参数,底层固定渲染一个 <input type="text">,属性得你手动加。
在 success 回调里操作:
layero.find('input').attr('maxlength', '10') 添加 HTML 属性(影响浏览器提示).prop('maxLength', 10),DOM 层级控制更稳,兼容 IE/Edgeyes 回调里必须二次校验:if (val.length < 2 || val.length > 10) { layer.tips(...); return; }
content: '<input maxlength="10">' —— layer 会把它当纯文本渲染,不生效最小长度校验完全靠 JS,因为 minlength 在 input 上不会触发原生提示,required 也只管非空,不管长度下限。
tlwdr7650路由器没有wps按钮(tlwdr7650路由器没有wps按钮怎么办)
tlwdr7632扩展器电脑怎么设置(tlwdr7632扩展器电脑设置方法)
tlwda6332re安装教程(tlwda6332re如何安装)
tlwdr7632扩展器手机怎么设置(tlwdr7632扩展器手机设置方法)
tlxdr3010怎么设置网速快(tlxdr3010网速快设置方法)
tlwdr5620易展版怎么克隆(tlwdr5620易展版克隆方法)