如何在表单提交后显示选择值并且有错误?

时间:2018-02-16 20:30:36

标签: jquery laravel

当用户提交表单时,如果有任何错误,则应使用提交的值填充字段,以便用户不需要再次插入这些值。这工作正常,但选择字段不起作用。

我有以下代码:

<form method="post" class="clearfix" action="{{route('post.store')}}" enctype="multipart/form-data">

<div class="form-row">
    <div class="form-group">
        <label for="event_categories">Categories</span></label>
        <select required  multiple class="form-control"  name="categories[]" id="categories">

            @foreach($categories as $category)
                <option value="{{$category->id}}">{{$category->name}}</option>
            @endforeach

        </select>
    </div>
</div>
<form>

如果在提交表单后出现任何错误,您知道为什么选择的类别不会出现吗?

4 个答案:

答案 0 :(得分:0)

你可以使用laravel文档 https://laravel.com/docs/5.6/requests#old-input

检索旧输入

要从先前的请求中检索闪存输入,请在Request实例上使用旧方法。旧方法将从会话中提取先前闪存的输入数据:

cli

Laravel还提供全球老帮手。如果要在Blade模板中显示旧输入,则使用旧帮助程序会更方便。如果给定字段不存在旧输入,则返回null:

username = $request->old('username');

答案 1 :(得分:0)

如果你使用@old作为select中的第一个选项呢?在@foreach循环之前

答案 2 :(得分:0)

您需要在选项上设置selected属性:

<option value="{{$category->id}}" {{ in_array($category->id, old('categories')) ? 'selected' : '' }}>{{$category->name}}</option>

答案 3 :(得分:0)

您必须指定在加载页面时最初应选择<option>,方法是为其提供适当的属性:

<option selected>...</option>

在您提供的代码中,selected属性永远不会应用于您的任何<option>,因此当您加载页面时,浏览器永远不会将它们设置为selected。< / p>

当您被重定向回表单时,浏览器不知道使用上一个请求提交了哪些数据(提交表单时发出的POST请求),因此它无法自动将任何选项设置为{{ 1}},除非在应用程序返回的HTML响应中明确告知。

当验证失败时,Laravel会自动将提交的表单数据闪存到会话中,因此您可以在以下请求中检索它并使用此信息呈现表单,向浏览器指示selected s中的哪一个以前<option>(如果有的话)。

您可以使用Laravel的old()帮助程序访问使用上一个请求提交的数据。

要获取为字段提交的值,请将字段的selected传递给帮助程序:

name

由于PHP将您的字段值解释为数组,<input name="something" value="{{ old('something', 'optional fallback value') }}"> 将返回值数组或old('categories')

现在,对于每个选项,检查循环中当前选项的值是否出现在旧值数组中,如果出现,则应用null属性:

selected

在调用@foreach ($categories as $category) <option {{ in_array($category->id, old('categories', [])) ? 'selected' : '' }} value="{{ $category->id }}"> {{ $category->name }} </option> @endforeach 帮助器中包含第二个参数非常重要,它将空数组(old())设置为回退值。这可以防止它在前一个请求的数据中找不到指定键时返回[],这会导致in_array()抛出错误。

此外,您在标签中有一个错误的结束null标记:

</span>