Предварительный выбор дочернего выпадающего списка, который зависит от родительского выпадающего списка

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть 2 выпадающих списка, т.Е. Родительский и дочерний выпадающий список

 <select id="parentDropdown">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
</select>

<select id="childDropdown">
</select>
 

Значения ChildDropdown основаны на выборе parentDropdown, и для получения значений childDropdown через изменение parentDropdown написана отдельная функция onChange. И он работает отлично, так как значения в childDropdown поступают правильно.

Теперь, в одной из функций, значения parentDropdown и childDropdown поступают из другого метода Ajax, и мне просто нужно предварительно выбрать оба выпадающих значения.

 //Parent Dropdown
var parentDropdownVal = response.parentDropdownVal;
if((typeof parentDropdownVal !== 'undefined') amp;amp; (parentDropdownVal !== '')){
  $('#parentDropdown').val(parentDropdownVal).trigger('change');
}


//Child Dropdown
var childDropdownVal = response.childDropdownVal;
if((typeof childDropdownVal !== 'undefined') amp;amp; (childDropdownVal !== '')){
    $('#childDropdown').val(childDropdownVal).trigger('change');
}
 

Проблема, с которой я сталкиваюсь, заключается в том, что родительский выпадающий список устанавливается. Но значение childDropdown не выбирается. Поскольку parentDropdown запускает метод изменения, поэтому обновленные / соответствующие значения должны поступать в childDropdown. И выпадающие значения в childDropdown также поступают. Но не предварительный выбор дочернего выпадающего списка, который поступает из другого метода ajax.

Но, когда я помещаю alert внутрь, значения для childDropdown становятся предварительно выбранными.

 //Child Dropdown
var childDropdownVal = response.childDropdownVal;
if((typeof childDropdownVal !== 'undefined') amp;amp; (childDropdownVal !== '')){
    alert("hello");
    $('#childDropdown').val(childDropdownVal).trigger('change');
} 
 

Я пытался

1) $('#parentDropdown option:contains(' parentDropdownVal ')').prop('selected', true);

2) $('#parentDropdown option').eq(parentDropdownVal).attr('selected', 'selected');

3) $('#childDropdown').val(childDropdownVal).trigger('change');

Любая помощь / подсказка / предложения очень важны.

Комментарии:

1. Похоже, проблема с синхронизацией. Попробуйте сначала установить дочерние параметры, а затем родительские параметры. Таким образом, к тому времени, когда родительский элемент выбирается и запускает событие его изменения, у дочернего элемента уже есть свои параметры.

2. @Thomas: я не могу сначала установить дочерние параметры, поскольку это полностью зависит от того, какой parentDropdown выбран. Да, это проблема времени, о которой я тоже думаю.

3. Так и думал. Правильным способом было бы установить параметры дочернего списка в change-event-прослушивателе родительского списка. после этого проверьте, установлено ли response.childDropdownVal значение, и установите его в качестве выбранного параметра. весь этот код принадлежит прослушивателю событий.

4. можно ли связать два вызова ajax? $.ajax({}).done($.ajax({}).done())

5. На самом деле, есть 3-4 выпадающих списка, зависящих друг от друга значений. И отдельная функция onChange, написанная для всего выпадающего списка. Итак, когда я запускаю $('#parentDropdown').val(parentDropdownVal).trigger('change'); . Автоматически появляются выпадающие значения для дочернего выпадающего списка. Он не выбирается. В этом проблема @Mihai @Thomas