JQuery: выберите раскрывающийся список, связанный с другим раскрывающимся списком. - PullRequest
0 голосов
/ 22 сентября 2018

ОБНОВЛЕНО У меня есть 2 раскрывающихся списка (выбор входа) - один для стран ( # label-country ), другой - для состояний ( # label-state ).Как только пользователь выбирает страну - список состояний меняется.Следующий код изменяет список состояний, после выбора страны:

$('#label-country').change(function() {
    var countryinput = $('#label-country').val();
    $.post('func/region.php', {countryinput:countryinput}, function(states) { 
        $('#label-state option').remove();
        $('#label-state').append(states);
    });
});

Работает нормально, если пользователь вручную выбирает страну, а затем вводит состояние для этой страны.Но в некоторых случаях я хочу иметь возможность предварительно выбрать страну и штат.

Я обнаружил, что следующий код не работает - страна выбрана по мере необходимости, но состояние - нет:

$('#label-country').val('US').trigger('change');
$('#label-state').val('Alaska');

Поток, который я имею в виду:

  1. США выбирается с помощью следующей строки

$ ('# label-country'). Val ('США ')

Функция изменения триггера

.trigger ('change')

Выберите штат "Аляска", используя

$ ('# label-country'). Val ('Alaska')

В концеУ меня есть:

  1. Страна выбрана

  2. Список состояний изменен

  3. Состояние не выбрано

Я что-то упустил в последовательности изменения функции и выбора состояния?

1 Ответ

0 голосов
/ 23 сентября 2018

$('#label-country').val('US').trigger('change'); запускает событие, в котором есть асинхронная функция записи ajax, которая является точной причиной вашей проблемы.

Нет, пока не сработает функция ajax .done(), ваша следующая строка $('#label-state').val('Alaska'); имеетк тому времени, когда это произойдет, у вашего $('#label-state') еще нет значения, чтобы доказать это, вы можете использовать цикл for для регистрации его значений.

Так что все, что вам нужно сделать,в этом случае, это означает что-то вроде

if(countryInput=="US") $('#label-state').val('Alaska'); внутри функции $.post и удаление $('#label-country').val('US').trigger('change');.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...