layui radio验证需同名且任一加required,否则不触发;lay-reqtext仅改文字不控位置;动态渲染后须调form.render('radio')。

radio未选中时验证不触发?先确认name和required
根本原因是Layui验证逻辑只对「同名且带required」的radio组生效,不是每个单选框单独校验。常见错误是name值大小写不一致、多了空格,或漏写了required属性。
- 同组所有
<input type="radio">的name必须完全相同(比如name="gender",不能一个写gender、另一个写Gender) - 必须在任意一个radio上显式加
required,而不是靠lay-verify="required"——后者对单个radio无效 - 不要给每个radio都加
lay-verify="required",这不会触发整组校验
自定义提示文本用lay-reqtext,但位置不可控
lay-reqtext只能改提示文字内容,不影响显示位置。比如:<input type="radio" name="type" value="1" required lay-reqtext="请选择类型">,提交时仍会以默认tips方式(悬浮气泡)出现在输入框旁。
- 它不支持右侧红字、下方静态提示等定制样式
- 如果想统一修改所有radio的提示文案,可在
form.verify()里按name匹配处理,但依然走默认渲染流程 - 真正要控制位置,必须放弃
lay-vertype,改用DOM操作插入提示元素
想让提示显示在radio右侧或下方?手动插入提示容器
内置lay-vertype="tips"无法固定在radio旁,尤其多行排列时气泡容易错位。可靠做法是在HTML中预留提示容器,验证时用elem精准操作:
- 在radio外层包裹
<div class="layui-form-item">,里面放radio和一个空<code><div class="verify-tip"></div> - CSS设
.verify-tip { position: absolute; top: 100%; left: 0; color: #FF5722; font-size: 12px; margin-top: 4px; }(下方)或right: 0; top: 50%; transform: translateY(-50%);(右侧) - 在
form.verify回调里:用$(elem).closest('.layui-form-item').find('.verify-tip').text('请选一项')写入提示 - 验证通过时清空:
$(elem).closest('.layui-form-item').find('.verify-tip').text('') - 插入DOM后立即执行:
layui.form.render('radio') - 如果同时有select、checkbox,可合并调:
layui.form.render('select,radio,checkbox') - IE8–9下
:checked伪类不支持,自定义验证里别用document.querySelector('input[name="x"]:checked'),改用遍历querySelectorAll+r.checked判断
动态渲染radio后验证失效?记得调form.render('radio')
从接口拉取选项、用JS拼接HTML插入后,Layui不会自动识别新radio。不调form.render('radio'),验证逻辑压根不注册,自然没提示。
display: none或visibility: hidden,导致Layui初始化时跳过该组;还有异步加载后忘记form.render('radio'),验证函数根本没挂载上去。











