layui单选框应通过form.on('radio(filter)')绑定事件,filter对应name值;在回调中用data.value获取值并发起AJAX请求,需确保监听器在form.render()之后注册,避免重复绑定和重复渲染。

layui单选框怎么绑定点击事件
layui 的 radio 是通过 form.render() 渲染的表单元素,原生 click 事件无法直接绑定到渲染后的 DOM 上——因为实际点击的是 layui 生成的伪元素(.layui-form-radio),真实 <input type="radio"> 被隐藏了。
正确做法是监听 form 模块的 form.on('radio(filter)') 事件,其中 filter 是你在 name 属性上设置的值(或自定义的 lay-filter)。
- 确保单选框有
name属性,比如<input type="radio" name="status" value="1"> - 在
form.on()中用该name值作为 filter,如form.on('radio(status)', ...) - 事件回调的
data对象里有value和elem,可直接取到当前选中的值
选中后怎么发 AJAX 请求
在 form.on('radio(xxx)') 回调里调用 $.ajax() 或 layui.ajax() 即可。注意:不要在 change 或 click 上重复绑定,否则可能触发多次(尤其页面重 render 后)。
示例:
form.on('radio(status)', function(data){
$.ajax({
url: '/api/update',
type: 'POST',
data: { status: data.value },
success: function(res) {
console.log('提交成功');
}
});
});
-
data.value就是当前被选中的 radio 的value,无需再查 DOM - 避免在回调里调用
form.render(),这会引发重复监听 - 如果接口返回需要更新其他字段(比如禁用按钮),建议在
success里操作 DOM,而不是再次触发 form 监听
为什么有时候 AJAX 只触发一次或不触发
常见原因是监听器注册时机不对:form 监听必须在 form.render() 之后执行,否则事件不会生效;另外,如果单选框是动态插入的(比如从弹窗加载),要确保监听器在插入后、render 之后再绑定。
- 检查是否漏写了
form.render(),尤其是动态追加内容后 - 确认
lay-filter值和form.on()中的 filter 完全一致(区分大小写) - 浏览器控制台看是否有
Uncaught TypeError: Cannot read property 'on' of undefined——说明layui.use(['form'], callback)没包住监听逻辑 - 不要把
form.on()写在$(document).ready()里却不等 layui 加载完成
要不要防重复提交
单选框切换时可能快速连点,导致多个请求并发发出。虽然业务上通常只关心最后一次,但后端未必幂等,前端最好加一层简单节流。
- 用
var lock = false+if (lock) return; lock = true;最简控制 - 成功后记得
lock = false,失败也要恢复(否则锁死) - 更稳妥可用
layui.use('layer')在请求中显示 loading,同时阻断后续点击
真实场景里,radio 切换往往关联状态变更,而状态变更常需服务端校验,所以别省掉 loading 提示和错误反馈——这点容易被忽略,但用户感知极强。


















