【问题标题】:Define the selected option with the old input in Laravel / Blade使用 Laravel / Blade 中的旧输入定义所选选项
【发布时间】:2015-05-22 18:50:05
【问题描述】:

我有这个代码:

<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>

所以当表单出现错误时,我使用Redirect::route('xpto')-&gt;withInput()-&gt;withErrors($v) 行。但我无法重新填充选择字段。例如,有什么方法可以在不使用 JavaScript 的情况下做到这一点?

【问题讨论】:

    标签: laravel laravel-4 blade


    【解决方案1】:

    此外,您可以使用? 运算符来避免使用@if @else @endif 语法。变化:

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

    只需:

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

    【讨论】:

      【解决方案2】:

      解决方案是使用Blade Directives - If StatementsInput::old()$key 变量进行比较。

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

      【讨论】:

      • 我想问这是不是问题所在。 "repopulate the select""show selected option" 是有区别的。尝试在以后更清楚地解释您的问题。
      • 用选定的选项重新填充选择。
      • 我知道,我很高兴你能成功,但你的标题和问题的描述有些矛盾。
      • 我觉得现在可以了 :)
      • @Christopher 输入名称是这样的数组呢 title[] 我们应该怎么做?我做同样的事情它不起作用。
      【解决方案3】:

      除了使用 Input 类,您还可以使用 old() 帮助器来缩短它。

      <option {{ old('name') == $key ? "selected" : "" }} value="{{ $value }}">
      

      【讨论】:

        【解决方案4】:
        <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>
        

        【讨论】:

        • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请编辑您的答案以添加解释,并说明适用的限制和假设。
        • 由于某种原因,三元运算符对我不起作用,而这确实起作用了。
        • 按预期工作!
        【解决方案5】:

        玩了一会儿后,我想出了这个,它似乎工作得很好

        <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>
        

        我在利用收集功能方面可能 100% 错误,但它在我的许多测试中都运行良好。在看到网站上的其他一些帖子后,我看到有人建议使用 in_array($needle, $array) 函数,但在注意到如果我的 old('options') 为 null 它会出错,因为它需要 in_array 需要,打赌你猜到了一个数组。因此,在找到解决方案后,尽管很丑陋,但我使用了 collect 方法,因为毕竟我们使用 larval 是对的!无论如何,丑陋的解决方案如下

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

        内联但对我来说看起来很丑的人,长话短说我使用以下代替

        {{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}
        

        希望这对其他人有所帮助!

        这似乎不适用于非多选字段,但会返回一个确实适用的字段。

        【讨论】:

          【解决方案6】:

          我已更改代码以在标题值中包含 '',因为没有引号它无法工作

              <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>
          

          【讨论】:

            【解决方案7】:

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

            它的工作原理: select标签将选择的选项值存储到其名称属性中,如果您选择任何选项,它将存储到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()!!}
            

            【讨论】:

              【解决方案8】:
              <option value="{{ $key }}" {{ Input::old('title') == $key ? 'selected="selected"' : '' }}>{{ $val }}</option>
              

              【讨论】:

                【解决方案9】:
                      <select class="form-control" name="kategori_id">
                        <option value="">-- PILIH --</option>
                        @foreach($kategori as $id => $nama)
                            @if(old('kategori_id', $produk->kategori_id) == $id )
                            <option value="{{ $id }}" selected>{{ $nama }}</option>
                            @else
                            <option value="{{ $id }}">{{ $nama }}</option>
                            @endif
                        @endforeach
                        </select>
                

                【讨论】:

                  【解决方案10】:

                  这会对你有所帮助,如果存在就与旧值比较,如果不存在则与默认值比较

                  <select name="select_name">
                      @foreach($options as $key => $text)
                         <option {{ ($key == old('select_name',$default))?'selected':'' }}> {{ $text }} </option>
                      @endforeach
                  </select>
                  

                  $default 是从控制器注入到视图的值

                  【讨论】:

                  • @RJFares 只有在没有old('select_name') 的情况下才能使用$default
                  【解决方案11】:

                  Laravel 8.59.0 简洁明了的使用示例(旧的预选编辑表单)

                  您可以将它用于您的编辑页面。它带有来自数据库的默认选择,如果您提交未通过验证表单,则通过包含old 来返回答案。

                  <select name="brand_id">
                      @foreach ($brands as $brand)
                          <option value="{{ $brand->id }}" @if ($product->brand_id === $brand->id || old('brand_id') === $brand->id) selected @endif>{{ $brand->title }}</option>
                      @endforeach
                  </select>
                  

                  【讨论】:

                    【解决方案12】:

                    我的解决方案是循环,以避免重复选项

                                                <select class="form-control" name="status" >
                                                  <?php $lists = ['Current', 'Win', 'Lose']; ?>
                    
                                                  @foreach($lists as $list)
                                                  <option value={{$list}} {{(old('status') == $list?'selected':'')}} >{{$list}}</option>
                                                  @endforeach
                    
                                                </select>
                    

                    【讨论】:

                      【解决方案13】:

                      好吧,我的 2 美分,使用 Laravel 的 old() 函数的默认值。

                      <select name="type">
                          @foreach($options as $key => $text)
                              <option @if((int) old('type', $selectedOption) === $key) selected @endif value="{{ $key }}">{{ $text }}</option>
                          @endforeach
                      </select>
                      

                      【讨论】:

                        【解决方案14】:
                        <select style="width: 100%;" name="id_driver" id="id_driver" >
                          <option value="" @if (old('id_driver') == "")  selected @endif>Select</option>
                          @foreach(\App\Driver::all() as $driver)
                            <option value="{{$driver->id}}" @if (old('id_driver') == $driver->id)  
                                selected  @endif >(#{{$driver->id}}) {{$driver->business_name}}
                            </option>
                          @endforeach
                        </select>
                        

                        【讨论】:

                          【解决方案15】:

                          许多答案展示了使用三元运算符的一个衬里,但我认为使用 @if 更具可读性,至少对于初学者而言。如果没有 else 语句,以下内容就足够了。

                           <option value="{{ $key }}" @if(old('title')===$key) selected @endif>{{ $val }}</option>
                          

                          【讨论】:

                          • 我完全同意你的观点,但我认为你应该使用相等运算符(==)而不是相同的(===)它才能工作!
                          【解决方案16】:
                          <select>
                              @if(old('value') =={{$key}})
                               <option value="value" selected>{{$value}}</option>
                              @else
                               <option value="value">{{$value}}</option>
                              @endif
                          </select>
                          

                          【讨论】:

                          • 这感觉有点开销,因为您可以改用{{ old('foo') == $foo-&gt;foo_id ? ' selected="selected' : '' }}。请始终为您的标签属性设置一个值!
                          【解决方案17】:

                          考虑到用户也想编辑他们之前的输入,

                          <select name="title">
                            @foreach ($titles as $key => $value)
                              <option value="{{$value->id}}" {{(old('title', $user->title_id) == $value->id ? 'selected' : '')}} > {{$value->name}} </option>
                            @endforeach
                          </select>
                          

                          old('title', $user->title_id) 第一次返回用户保存的title_id,如果验证失败则返回用户选择的title_id。然后如果它与当前选项 id 匹配,则它被选中。

                          【讨论】:

                            【解决方案18】:

                            通过如下错误验证实现改进 CodeToLife 的答案

                            <div class="form-group row">
                                <label for="person-field" class="col-md-4 col-form-label text-right">First Person</label>
                                <div class="col-md-6">
                                    <select id="person-field" class="custom-select select2 @error('person') is-invalid @enderror" name="person" required>
                                        <option></option>
                                        @foreach(\App\User::all() as $user)
                                            <option value="{{$user->id}}" @if (old('person') == $user->id) selected  @endif>{{$user->name}}
                                            </option>
                                        @endforeach
                                    </select>
                                    @error('person')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                    @enderror
                                </div>
                            </div>
                            

                            【讨论】:

                              猜你喜欢
                              • 2022-11-24
                              • 2019-12-07
                              • 1970-01-01
                              • 1970-01-01
                              • 2021-01-26
                              • 2018-03-12
                              • 1970-01-01
                              • 2021-10-23
                              • 2015-06-22
                              相关资源
                              最近更新 更多