使用Laravel/Blade中的旧输入定义所选选项

Chr*_*her 26 laravel blade laravel-4

我有这个代码:

<select required="required" class="form-control" name="title">
    <option></option>
    @foreach ($titles as $key => $val)
        @if (stristr($key, 'isGroup'))
            <optgroup label="{{ $val }}">
        @else
        <option value="{{ $key }}">{{ $val }}</option>
        @endif
    @endforeach
    </select>
Run Code Online (Sandbox Code Playgroud)

所以当表单有错误时我会使用该行Redirect::route('xpto')->withInput()->withErrors($v).但我不能重新填充选择字段.没有使用JavaScript的任何方法吗?

Tim*_*wis 54

此外,您可以使用?运算符来避免使用@if @else @endif语法.更改:

@if (Input::old('title') == $key)
      <option value="{{ $key }}" selected>{{ $val }}</option>
@else
      <option value="{{ $key }}">{{ $val }}</option>
@endif
Run Code Online (Sandbox Code Playgroud)

只需:

<option value="{{ $key }}" {{ (Input::old("title") == $key ? "selected":"") }}>{{ $val }}</option>
Run Code Online (Sandbox Code Playgroud)


5le*_*ess 24

除了使用 Input 类之外,您还可以使用 old() 助手来缩短它的时间。

<option {{ old('name') == $key ? "selected" : "" }} value="{{ $value }}">
Run Code Online (Sandbox Code Playgroud)


Akb*_*ali 20

在向您展示的所有方法中,如果您的项目是用高于 Laravel 9 的版本制作的,我不建议使用它们。

使用这个,因为 laravel 本身已经添加了这个

已选中/已选择/已禁用

<select name="version">
    @foreach ($product->versions as $version)
        <option value="{{ $version }}" @selected(old('version') == $version)>
            {{ $version }}
        </option>
    @endforeach
</select>
Run Code Online (Sandbox Code Playgroud)


Chr*_*her 11

解决方案是Input::old()$key变量进行比较.

@if (Input::old('title') == $key)
      <option value="{{ $key }}" selected>{{ $val }}</option>
@else
      <option value="{{ $key }}">{{ $val }}</option>
@endif
Run Code Online (Sandbox Code Playgroud)

  • 我会问这是不是问题.*"重新填充选择"*和*"显示所选选项"*之间存在差异.尝试在将来更清楚地解释您的问题. (3认同)

Car*_*nes 7

玩了一下之后,我想出了这个,它看起来非常出色

<select name="options[]" id="options" class="form-control" multiple>
    @foreach($settings->includes->get('optionList') as $option)
        <option value="{{ $option->id }}" {{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}>{{ $option->name }}</option>
    @endforeach
</select>
Run Code Online (Sandbox Code Playgroud)

在利用collect函数时我可能100%错误,但它在我的许多测试中都能正常工作.在网站上看到一些其他帖子后,我看到有人建议利用in_array($ needle,$ array)函数,但在注意到如果我的旧('options')为null之后会出错,因为它需要in_array要求,打赌你猜到一个阵列.因此,在找到解决方案之后,虽然我使用了收集方法,但我们正在使用larval,因为我们正在使用larval.好吧无论如何丑陋的解决方案如下

@if (old("options")){{ (in_array($option->id, old("options")) ? "selected":"") }}@endif
Run Code Online (Sandbox Code Playgroud)

内联,但看起来很丑的男人这么长的故事,我正在使用以下代替

{{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}
Run Code Online (Sandbox Code Playgroud)

希望这有助于其他人!!

这似乎不适用于非多重选择字段,但是可以使用一个可以为此工作的字段.


G-R*_*dra 7

<select name="gender" class="form-control" id="gender">
                                <option value="">Select Gender</option>
                                <option value="M" @if (old('gender') == "M") {{ 'selected' }} @endif>Male</option>
                                <option value="F" @if (old('gender') == "F") {{ 'selected' }} @endif>Female</option>
                            </select>
Run Code Online (Sandbox Code Playgroud)

  • 尽管此代码可以解决问题,但是[如何解释](//meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)的方式和原因将确实有助于改善该问题。信息的质量,并可能导致更多的投票。请记住,您将来会为读者回答问题,而不仅仅是现在问的人。请编辑您的答案以添加解释,并指出适用的限制和假设。 (2认同)

小智 5

我更改了代码以使其包含''在标题值上,因为如果没有引号,它将无法正常工作

    <select class="form-control" name="team" id="team">
     <option value="">---------Choose Team---------</option>
           @foreach($teams as $team)
    <option value="{{$team->id}}" {{(old('team')==$team->id)? 'selected':''}}>{{$team->name}}</option>

    @endforeach
    </select>

    eg.<select name="title">
    <option value="1"  {{ old('title') == '1' ? 'selected' : '' }}>
        Item 1
    </option>
    <option value="2" {{ old('title') == '2' ? 'selected' : '' }}>
        Item 2
    </option>

    </select>
Run Code Online (Sandbox Code Playgroud)


Lor*_*ord 5

Laravel 6 或更高版本:只需使用 old() 函数,例如@if (old('cat')==$cat->id),它将为您完成其余的工作。

它是如何工作的: select 标签将选定的选项值存储到它的 name 属性中,如果您选择任何选项,它将存储到cat 中。第一次加载页面时,cat 中没有任何内容,当用户选择一个选项时,该选项的值会存储到 cat 中,因此当用户被重定向时,old()函数会从 cat 中提取先前的值。

 {!!Form::open(['action'=>'CategoryController@storecat', 'method'=>'POST']) !!}
        <div class="form-group">
            <select name="cat" id="cat" class="form-control input-lg">
                <option value="">Select App</option>
                @foreach ($cats as $cat)
                    @if (old('cat')==$cat->id)
                        <option value={{$cat->id}} selected>{{ $cat->title }}</option>
                    @else
                        <option value={{$cat->id}} >{{ $cat->title }}</option>
                    @endif
                @endforeach
            </select>
        </div>

        <div class="from-group">
            {{Form::label('name','Category name:')}}
            {{Form::text('name','',['class'=>'form-control', 'placeholder'=>'Category name'])}}
        </div>
    <br>
    {!!Form::submit('Submit', ['class'=>'btn btn-primary'])!!}
    {!!Form::close()!!}
Run Code Online (Sandbox Code Playgroud)