у меня есть форма с выбором ввода, проверка в порядке, но при неудаче поле выбора не заполняет старое значение
вот мое поле выбора
<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>
как я могу решить это?
Если вы не хотите использовать сборку 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>
Я лично думаю, что этот код чище. Здесь нет правильного или неправильного, я могу понять, почему некоторые предпочли бы заявления Laravel @if @endif, я просто думаю, что они выглядят слишком визуально беспокоящими.
<option {{ old('gender')=='male' ? 'selected="selected"' : '' }}>Test option</option>
Это связано с выбором элемента 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>
Это способ, которым я занимаюсь, очень динамичный.
<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>
Я бы порекомендовал использовать 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.