установка выбранной опции не работает - PullRequest
0 голосов
/ 18 марта 2020

Я использую Laravel в своем приложении и у меня есть вопрос о jquery выборе. В моем случае я хочу сопоставить option.value с идентификатором, и если он совпадает, пометьте option как выбранный. Вот мой код:

<select id="class" name="class" class="custom-select form-control" required>
        @foreach ($classes as $class)
        <option value="{{ $class->id }}"
                {{ old('class_id') ?? $subject->class_id == $class->id ? 'selected' : '' }}>
        {{ $class->name }}</option>

        @endforeach
</select>


<select id="section" name="section" class="custom-select form-control" required>
       <option value="">- -</option>
 </select>

и в моем javascript, который загружается в конце страницы:

$(document).ready(function(){
    var class_id = $('#class option:selected').val();
    var section_id = $('#hidSectionID').val();
    fetchSections(class_id);
    setSection(section_id);
});

fetchSections (class_id) - это моя ajax функция, которая работает нормально и добавляет * выберите [name = "section"] * варианты с этим ответом.

<option value="1">Option 1</option><option value="2">Option 2</option>

Но моя вторая функция, которая предназначена для установки опции секции как выбранной, если она соответствует var section_id (которая идет от Laravel контроллера), не работает. Я пробовал разными способами, но это не работает:

function setSection(section_id){
    // Try # 1
    $("select#section option[value="+section_id+"]").prop("selected", true);

    // Try # 2
    $("#section").val(section_id);

    // Try # 3
    $("#section > option").each(function(){
        if($(this).val()===section_id){
            $(this).attr("selected","selected");
            return false;   
        }
    });

    // Try # 4
    $.each($("#section option"), function(){
        // alert($(this).text() + " - " + $(this).val());                    
    });
}

Надеюсь, я написал достаточно кода, чтобы понять эту проблему. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 19 марта 2020

Как упомянуто @ freedomn-m, я вызвал мою setSection функцию сразу после вызова ajax fetchSection . Итак, я добавил в свой код функцию jquery delay () .

$("#section").delay(1000).queue(function(){
    $(this).val(section_id); 
    $(this).dequeue();
}); 

И она отлично работает.

...