【发布时间】:2020-11-23 22:53:23
【问题描述】:
我有一个复选框
<input type="checkbox" name="example">
由于验证失败,用户提交表单并返回,所以我想显示复选框的先前状态
<input
type="checkbox"
name="example"
{!! old('example') ? 'value="1" checked' : 'value="0"' !!}>
这里的第一个问题是,现在如何处理验证?如果是0 或1,我会添加布尔验证,但现在第一次是on,之后是0 或1。
有人可能会说,如果你最初使用 {!! old('example') ? 'value="1" checked' : 'value="0"' !!},它的值将不再是 on。
所以我的第一个问题变成了这样:最初old('example') 的值为空,因此复选框没有选中属性,复选框的值将是0。现在,当用户提交表单时,old('example') 具有值(IT IS NOT NULL),所以这次复选框已选中属性,其值为 1,但它不能。
========
我遇到的另一个问题是,如果old('example') 具有真值(这意味着用户已经选中了复选框),我应该放一些东西来选中复选框。但它还没有完成。我想检查数据库中example 的值,所以如果old('example') 具有错误值(这意味着用户没有选中复选框)我想检查example 的值,如果它的值是1 选中复选框并将复选框的值设置为 1 否则为 0。所以我想到的是:
<input
type="checkbox"
name="example"
value="{!! old('example', isset($collection) ? $collection->example : null) == '1' : '1' : '0' !!}">
现在的问题是 old('example') 将是 on 或什么都没有。 $collection->example 的值将是 1 或 0 或 null。因此,如果我将它与 '1' 进行比较,即使 old('example') 为真,它也不会为真.所以让我们这样做:
@if(old('example') == 'on' || (isset($collection) && $collection->example))
<input type="checkbox" name="example" value="on" checked="checked">
@else
<input type="checkbox" name="example">
@endif
通过上面的这段代码,问题得到解决。但是还有其他更好的方法吗?
所以我的问题是如何处理后端的验证,当然还有如何在不涉及 jQuery 之类的情况下以更好的方法处理前端的复选框?
【问题讨论】: