заполнить старое поле выбора HTML в laravel при неудаче

у меня есть форма с выбором ввода, проверка в порядке, но при неудаче поле выбора не заполняет старое значение
вот мое поле выбора

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

как я могу решить это?

5

Решение

Если вы не хотите использовать сборку 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>
10

Другие решения

Я лично думаю, что этот код чище. Здесь нет правильного или неправильного, я могу понять, почему некоторые предпочли бы заявления Laravel @if @endif, я просто думаю, что они выглядят слишком визуально беспокоящими.

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

Это связано с выбором элемента HTML.

Если вы хотите назначить какое-либо значение опции по умолчанию для элемента select, используйте атрибут 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>
1

Это способ, которым я занимаюсь, очень динамичный.

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

Я бы порекомендовал использовать 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 в каждое значение select.

0
По вопросам рекламы [email protected]