Laravel 无法取消选中使用 old 并设置默认值的复选框
Posted
技术标签:
【中文标题】Laravel 无法取消选中使用 old 并设置默认值的复选框【英文标题】:Laravel can't uncheck checkbox using old with default value set 【发布时间】:2020-08-21 18:56:25 【问题描述】:我的申请表中有一个非常简单的复选框
<input type="checkbox" name="active" ( empty(old('active')) ? '' : ' checked' ) >
我的要求是:
-
当用户第一次访问网站时,默认情况下应该选中该复选框
表单验证失败后复选框应保持其值
对我来说,仅仅使用old
似乎不可能实现这一点,因为它也可以
old('active', true)
但随后将无法取消选中它(即验证失败后将选中未选中的框,因为默认值设置在 old
中)。
处理这个问题的标准方法是什么?还是没有办法使用另一个字段来检查表单是否已提交?
<input type="checkbox" name="active" ( empty(old('active')) && !empty(old('submit')) ? '' : ' checked' ) >
<input type="hidden" name="submit" value="submit">
谢谢
【问题讨论】:
我会在控制器中执行逻辑以确定是否应该检查它。在不知道您是如何进行验证的情况下,很难提供比这更详细的信息,但是您可以将自己的闪存数据发送回 view 方法,其中包含有关复选框是否被选中的详细信息。如果闪存数据丢失,则默认为选中。将该变量发送到视图中,然后使用它。 谢谢,我会的。只是想知道是否已经建立了以这种方式处理复选框的东西 你是怎么解决的?我现在正面临。 【参考方案1】:这可能很脏,但如果 $request->active
是 null
,您可以附加空字符串。
代码类似于$request->active ?? '';
。
【讨论】:
【参考方案2】:您可以将默认值传递给old
助手。
试试这个:
<input type="checkbox" name="active" old('active', true) ? 'checked' : '' >
【讨论】:
.. 但如果我这样做了,即使我取消选中它(当验证失败时),复选框也会被选中,因为它将默认为true
不,试试看。没有旧值 => 'checked' 旧值 == true => 'checked' 旧值 == false => ''
没有旧值 false 之类的东西...如果未选中复选框old('active', true)
将是 true
因为未设置 old('active')
以上是关于Laravel 无法取消选中使用 old 并设置默认值的复选框的主要内容,如果未能解决你的问题,请参考以下文章
取消选中“允许预编译站点可更新”时无法使用“发布期间预编译”网站
默认选中的单选输入在 Laravel 中使用 Bootstrap 语法不起作用