как обновить раскрывающееся меню Select2 после загрузки ajax другого контента?

Я использую Select2 в комбинации выпадающих меню. У меня есть одно меню для «Страны» и одно для «Государств / Провинций». В зависимости от страны, которая выбрана, раскрывающиеся диалоги «Штаты / Регионы» изменяются в контенте. Штаты / провинции вытягиваются с помощью ajax из базы данных, а затем отображаются следующим образом:

$display_output = '<select style="width:350px;" tabindex="2" name="state" id="state" data-placeholder="Choose a Country..."> '; $display_output .= '<option value="" selected>Select a State</option> '; while ($state_details = $this->fetch_array($sql_select_states)) { $display_output .= '<option value="' . $state_details['id'] . '" ' . (($selected_value == $state_details['id']) ? 'selected' : ''). '>' . $state_details['s.name'] . '</option>'; } $display_output .= '</select>'; 

Все идет нормально. Все провинции меняются правильно, однако, когда они изначально загружаются, Select2 показывает «undefined» для выпадающего списка состояний, хотя я его установил как

 data-placeholder="Choose a Country..." 

Я предполагаю, что это может быть потому, что при загрузке выбрана страна «Соединенные Штаты», и она заполняет список состояний, но ни один из них не является по умолчанию или не выбран. Есть ли другой способ определить значение по умолчанию, чтобы оно не отображалось «Undefined»?

И еще одна (но менее важная) проблема заключается в том, что когда кто-то выбирает «Соединенные Штаты», например, а затем выбирает «Аризону», если человек затем переходит в «Канаду» как страну, состояние «Аризоны» по-прежнему остается, но когда открытие выпадающего списка провинций Канады можно выбрать. Есть ли способ вернуть его на значение по умолчанию временно, когда кто-то выбирает другую страну, пока провинция не будет выбрана снова?

В настоящий момент мой код загрузки:

 <script> $(document).ready(function() { $("#state").select2(); }); </script> 

Выберите 3. *

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

 $("#dropdown").select2("destroy"); $("#dropdown").select2(); 

Если у вас возникли проблемы с сбросом состояния / региона при изменении страны, попробуйте очистить текущее значение с помощью

 $("#dropdown").select2("val", ""); 

Вы можете просмотреть документацию здесь http://ivaynberg.github.io/select2/, которая описывает почти / все функции. Select2 поддерживает такие события, как change которое можно использовать для обновления последующих выпадающих списков.

 $("#dropdown").on("change", function(e) {}); 

Выберите 4. * Обновить

Теперь вы можете обновить данные / список без перестройки элемента управления, используя:

 fooBarDropdown.select2({ data: fromAccountData }); 

Обычно другие компоненты могут прослушивать событие изменения или настраивать пользовательские обработчики событий, которые могут иметь побочные эффекты. Select2 не имеет настраиваемого события (например, select2: update), которое может быть вызвано иначе, чем изменение . Вы можете положиться на пространство имен событий jQuery, чтобы ограничить область выбора Select2, хотя путем запуска события * change.select2.

 $('#state').trigger('change.select2'); // Notify only Select2 of changes 

select2 имеет параметр placeholder . Используйте этот

 $("#state").select2({ placeholder: "Choose a Country" });