【问题标题】:populate old html select field in laravel upon failure失败时填充 laravel 中的旧 html 选择字段
【发布时间】:2014-11-28 04:40:25
【问题描述】:

我有一个带有选择输入的表单,验证很好,但失败时选择字段不会填充旧值 这是我的选择字段

  <div class="control-group">
   <label class="control-label">Gender :</label>
    <div class="controls">
        <select  name="gender" value= "{{ Input::old('gender') }}">
            <option>Select</option>

                <option value="M">Male</option>
                <option value="F">Female</option>
        </select>
    </div>
</div> 

我该如何解决这个问题?

【问题讨论】:

  • 你用-&gt;withInput()重定向回来吗?
  • 是的,我做到了,其他输入字段填充得很好
  • 啊,这是一个选择。我没有注意到这一点。选择不是那样工作的。请参阅 w3schools.com/tags/att_option_selected.asp 我使用 Form::model 和 Form::select,Laravel 方式:)
  • 不想使用 laravel 表单类怎么办?
  • 那你只需要想办法把selected插入右边option。我不明白你为什么不使用 Laravel 表单类,但那就是我。

标签: php forms laravel laravel-4 laravel-form


【解决方案1】:

如果你不想使用 Laravel Form 构建,你需要这样做:

 <div class="control-group">
   <label class="control-label">Gender :</label>
    <div class="controls">
        <select  name="gender">
            <option>Select</option>

                <option value="M" @if (Input::old('gender') == 'M') selected="selected" @endif>Male</option>
                <option value="F" @if (Input::old('gender') == 'F') selected="selected" @endif>Female</option>
        </select>
    </div>
</div> 

【讨论】:

    【解决方案2】:

    我个人认为这段代码更干净。这里没有对错之分,我可以理解为什么有些人更喜欢 Laravel @if @endif 语句,我只是觉得它们在视觉上看起来太令人不安。

    <option {{ old('gender')=='male' ? 'selected="selected"' : '' }}>Test option</option>
    

    【讨论】:

      【解决方案3】:

      这是由于 HTML 选择元素造成的。

      如果您想为选择元素分配一些默认选项值,请为该特定选项使用属性 selected="selected" 否则默认情况下它将显示第一个选项值。

      <select  name="gender">
          <option>Select</option>
              <option value="M" @if (Input::old('gender') == 'M') selected="selected" @endif>Male</option>
              <option value="F" @if (Input::old('gender') == 'F') selected="selected" @endif>Female</option>
      </select>
      

      【讨论】:

        【解决方案4】:

        我就是这样做的,很有活力。

        <select id="gender" name="gender">
            <option>Select</option>
                <option value="M">Male</option>
                <option value="F">Female</option>
        </select>
        
        <script>
            var currentGender = null;
            for(var i=0; i!=document.querySelector("#gender").querySelectorAll("option").length; i++)
            {
                currentGender = document.querySelector("#gender").querySelectorAll("option")[i];
                if(currentGender.getAttribute("value") == "{{ old("gender") }}")
                {
                    currentGender.setAttribute("selected","selected");
                }
            }
        </script>
        

        【讨论】:

          【解决方案5】:

          我会推荐使用Laravel Collective 包。

          {!! Form::label('gender', 'Gender', ['class' => 'control-label']) !!}
          {!! Form::select('gender',
              ['M' => 'Male', 'F' => 'Female'],
              'F', //set default value (or null)
              ['class' => 'form-control', 'required' => true,]
          ) !!}
          

          它处理旧值而不使用丑陋的 if-else 注入每个选择值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-23
            • 1970-01-01
            相关资源
            最近更新 更多