【问题标题】:Laravel Blade - Repopulate checkbox if validation failed?Laravel Blade - 如果验证失败,重新填充复选框?
【发布时间】:2017-04-06 00:21:11
【问题描述】:

如果验证表单请求失败但如果用户没有提交表单然后使用数据库中的默认值,我如何重新填充复选框?

假设我们有名称输入字段和一个复选框。

输入名称

<input type="text" name="name" value="{{ old('name', $delivery->name) }}">

复选框:

<input type="checkbox" name="use_shipping"  @if(old('use_shipping', $delivery->use_shipping) == "1") checked="checked" @endif value="1">

输入名称字段正常工作,可以通过数据库重新填充值,或者如果验证请求失败,则重新填充值。

如果验证失败,复选框不会重新填充。如何解决这个问题?

例如,如果我没有输入名称(输入字段)并且取消选中 use_shipping 复选框 - 它应该在提交表单后重新填充复选框(验证失败)。

【问题讨论】:

  • value 属性后多余的双引号 (") 是什么
  • @Michel Oop。我已经编辑了这个问题。问题依然存在。

标签: laravel laravel-5 laravel-blade


【解决方案1】:

发生这种情况是因为浏览器没有在帖子数据中附加未选中的复选框,因此在重新填充表单时使用了 $delivery-&gt;use_shipping 的值。

您可以添加一个“默认”值为use_shipping 的隐藏输入来修复此行为:

<input type="hidden" name="use_shipping" value="0">
<input type="checkbox" name="use_shipping" value="1" {{ old('use_shipping', $delivery->use_shipping) ? 'checked="checked"' : '' }}>

当复选框被选中时,这将正常工作,因为后面的值会覆盖前面的值。

【讨论】:

    【解决方案2】:

    试试这个:

    <input type="checkbox" name="use_shipping" @if(old('use_shipping') || (old('use_shipping', null) == null && $delivery->use_shipping)) checked @endif value="{{ old('use_shipping') || (old('use_shipping', null) == null && $delivery->use_shipping)) }}">
    

    *使用运费应该是布尔值

    【讨论】:

    • 我认为这行不通 - checked 不接受值。它要么存在,要么不存在。
    • 这行不通。如果表单尚未提交,我们需要通过$delivery-&gt;use_shipping 默认检查或不检查。如果表单已提交且验证失败,则需要通过old() 重新填充
    【解决方案3】:

    这应该可以解决问题:

    <input name="use_shipping" type="checkbox" value="1" {{ old('use_shipping', $delivery->use_shipping) ? 'checked' : '' }} />

    【讨论】:

    • 同样的事情。如果验证失败,它不会重新填充复选框。如果验证失败,它将从数据库而不是 old 值重新填充。
    猜你喜欢
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多