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 似乎不可能实现这一点,因为它也可以

(2)记住校验失败后的值但一开始默认不校验 (1) 默认选中,例如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-&gt;activenull,您可以附加空字符串。 代码类似于$request-&gt;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 并设置默认值的复选框的主要内容,如果未能解决你的问题,请参考以下文章

取消选中“允许预编译站点可更新”时无法使用“发布期间预编译”网站

下拉设置为 0 时无法取消选中复选框

React - MUI - 无法取消选择多选中的所有项目

默认选中的单选输入在 Laravel 中使用 Bootstrap 语法不起作用

Laravel old($field) 在 select2/select 返回错误值

如何使用 jQuery Uniform 库取消选中复选框