#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