首页 > 解决方案 > 获取选择输入 laravel 的“旧”值

问题描述

我正在验证我的注册表单。

如果输入是常规输入,如果它像这样失败,我可以填充以前的值

<input type="tel" name="phone" value="{{old('phone')}}">

如何填充选择选项的值?

<div class="input--select">
                        <label>Age Range <span>*</span></label>
                        <select name="age_range" class="age-range" value="{{old('age_range')}}" required>
                          <option selected disabled>Select your age range</option>
                          <option value="18-25">18-25</option>
                          <option value="26-35">26-35</option>
                          <option value="36-45">36-45</option>
                          <option value="46-55">46-55</option>
                          <option value="56-65">56-65</option>
                          <option value="66-75">66-75</option>
                          <option value="75+">75+</option>
                        </select>
                        @if ($errors->has('age_range')) <span class="error-message">Age range option is required.</span> @endif
                      </div>

标签: phplaravelvalidationhtml-select

解决方案


我建议将所有年龄都放在一个数组中,然后将该数组传递给查看:

$ages = ['18-25','25-50','50-75','75+']; // More dynamic and you can extend in anytime

现在更改 html :

                <div class="input--select">
                    <label>Age Range <span>*</span></label>
                    <select name="age_range" class="age-range" value="{{old('age_range')}}" required>

                        // 1. first change which is creating your problem
                        <option {{ old('age_range') ? "" : "selected" }} disabled>Select your age range</option>

                       // 2. This is just optimization for short code

                        @foreach($ages as $age)
                          <option {{old('age_range') ==$age" ? $selected : ""}} value="{{$age}}">{{$age}}</option>
                       @endforeach
                    </select>


                    @if ($errors->has('age_range')) <span class="error-message">Age range option is required.</span> @endif
                  </div>

因此,在第 1 点中,您始终应用selectedwith first 选项。

假设您的旧值是46-55

你的 html 看起来像:

<select name="age_range" class="age-range" value="{{old('age_range')}}" required>
                      <option selected disabled>Select your age range</option>
                      <option value="18-25">18-25</option>
                      <option value="26-35">26-35</option>
                      <option value="36-45">36-45</option>
                      <option selected value="46-55">46-55</option>
                      <option value="56-65">56-65</option>
                      <option value="66-75">66-75</option>
                      <option value="75+">75+</option>
                    </select>

如果您查看上面的 html,则有 2 个选定选项。Html 总是选择第一个,这就是造成问题的原因。

第 1 点将检查是否有旧值可用,它不会将其selected应用于第一个占位符选项。


推荐阅读