Заполните выпадающий список на основе другого выпадающего выбранного значения в laravel — форма редактирования

Я нашел, как сделать это на другом сайте, и я получил это работает. Моя проблема заключается в том, что мне нужно использовать его в моей форме редактирования (предпочтительно в той же форме, что и моя форма создания, поскольку мои представления создания и редактирования используют одну и ту же форму). Когда я захожу на свою страницу редактирования, раскрывающееся значение «Раздел» выбирается в порядке, в котором оно должно быть. Но «Подраздела» нет, потому что, конечно, я не нажал на него. Возможно, это слишком легко исправить, но я не очень хорошо разбираюсь в 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');
});

1

Решение

Если вы просто хотите выбрать первый вариант в jquery, вы можете добавить:

$('#subsection option:eq(1)').prop('selected', true);

Или, если вы хотите выбрать конкретное значение, вы можете сделать это

$('#subsection option[value="value_to_be_selected"]').prop('selected', true);

Используйте это после того, как вы добавили все значения в подраздел

1

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

В моем контроллере я добавил:

    $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

Задача решена 🙂

1

Итак, что мы будем делать, так это вначале отправим значение в зависимый раскрывающийся список в виде
"<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>
1
По вопросам рекламы [email protected]