关于layui switch开关在关闭状态下值不能提交到后台的bug一种解决方案

1 篇文章 0 订阅

最近在使用layui+laravel做一个后台,发现layui的switch开关组件存在一个比较严重的bug,layui开关使用的是原生checkbox实现的,效果如下:
layui switch开关 开
layui switch开关 关

代码片段如下:

<div class="layui-form-item">
    <label class="layui-form-label">导航</label>
    <div class="layui-input-block">
        <input type="checkbox" name="is_show" value="1" checked class=" " lay-skin="switch" lay-text="是|否">
    </div>
</div>

我们知道,原生checkbox只有在checked状态时值才会被浏览器提交到后台,未checked时值不会被浏览器提交。
去百度了半天,常用的大概有这么两种解决方案:

  1. 添加js监听开关组件,并对组件值做处理
  2. 在后台入库的地方做判断,如果没有传值,就设置is_show=0

这2种方案或多或少存在着一些问题,比如,当这个组件被封装成一个component时,监听代码应该写在组件里还是主模板里?同一个页面如果有多个switch组件,是分别监听还是统一监听?后台入库方法是批量写入时,要对这(些)个字段单独处理?
经过一番深思,最后这样解决了:
在checkbox的上一行加个hidden,name和checkbox的name同名,值为0,代码片段如下:

<div class="layui-form-item">
    <label class="layui-form-label">导航</label>
    <div class="layui-input-block">
        <input type="hidden" name="is_show" value="0">
        <input type="checkbox" name="is_show" value="1" checked class=" " lay-skin="switch" lay-text="是|否">
    </div>
</div>
  • 当在【关】状态时,提交时会把is_show=0提交过去
  • 当在【开】状态时,提交时会把is_show=0和is_show=1都提交过去

由于这个checkbox的name结尾没有[],PHP不会当做数组处理,只保留最后的一个is_show=1,问题完美解决。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值