Я нашел, как сделать это на другом сайте, и я получил это работает. Моя проблема заключается в том, что мне нужно использовать его в моей форме редактирования (предпочтительно в той же форме, что и моя форма создания, поскольку мои представления создания и редактирования используют одну и ту же форму). Когда я захожу на свою страницу редактирования, раскрывающееся значение «Раздел» выбирается в порядке, в котором оно должно быть. Но «Подраздела» нет, потому что, конечно, я не нажал на него. Возможно, это слишком легко исправить, но я не очень хорошо разбираюсь в javascript. Мне в основном нужно второе раскрывающееся меню (подраздел), чтобы отобразить правильные параметры в зависимости от того, какой «раздел» (первое раскрывающееся меню) выбран в моем представлении редактирования.
Модель раздела:
public function subsections()
{
return $this->hasMany('App\Subsection');
}
Модель подраздела:
public function section()
{
return $this->belongsTo('App\Section');
}
Посмотреть:
{!! Form::select('section_id', [null=>'-- Select Section --'] + $sections, null, array('id' => 'section')) !!}
<select id="subsection" name="subsection_id" class="select">
<option>-- First Select Section --</option>
</select>
From my controller: $sections = Section::lists('section', 'id');
Автор сценария:
<script>
$(document).ready(function($){
$('#section').change(function(){
$.get("{{ url('api/dropdown')}}",
{ option: $(this).val() },
function(data) {
$('#subsection').empty();
$.each(data, function(key, element) {
$('#subsection').append("<option value='" + key +"'>" + element + "</option>");
});
});
});
});
</script>
Маршрут:
Route::get('api/dropdown', function(){
$id = Input::get('option');
$subsections = Section::find($id)->subsections;
return $subsections->lists('subsection', 'id');
});
Если вы просто хотите выбрать первый вариант в jquery, вы можете добавить:
$('#subsection option:eq(1)').prop('selected', true);
Или, если вы хотите выбрать конкретное значение, вы можете сделать это
$('#subsection option[value="value_to_be_selected"]').prop('selected', true);
Используйте это после того, как вы добавили все значения в подраздел
В моем контроллере я добавил:
$subsections = Subsection::where('section_id', '=', $transaction->section_id)->orderBy('subsection', 'asc')->lists('subsection', 'id');
И, на мой взгляд, я сделал это:
@if(isset($transaction))
{!! Form::select('subsection_id', [null=>'-- Select Subsection --'] + $subsections, null, array('class' => 'select', 'id' => 'subsection')) !!}
@else
<select id="subsection" name="subsection_id" class="select">
<option>-- First Select Section --</option>
</select>
@endif
Задача решена 🙂
Итак, что мы будем делать, так это вначале отправим значение в зависимый раскрывающийся список в виде
"<option value="">Select Something</option>"
и при возврате в случае ошибки создайте полный раскрывающийся список с выбранным ниже значением и верните это уменьшит множество вызовов javascript.
контроллер:
if($error){
//create get array of second drop-down, suppose $second_drop
// create complete second drop-down like
$selectbox="";
foreach($second_drop as $option){
$selectbox.="<option value='". $option->id."'";
if($request->option2==$ $option->id){
$selectbox.=" selected ";
}
$selectbox.=">".$option->value."</option>";
}
}
return view('routename', ['selectbox2' => $selectbox]);
Посмотреть:
<select id="subsection" name="subsection_id" class="select">
{!! $selectbox !!}
</select>