Мультиселект Select2 возвращает только первый выбранный элемент - PullRequest
0 голосов
/ 26 марта 2019

У меня есть форма конфигурации с несколькими множественными тегами, использующими select2.Выбранные параметры отображаются правильно при использовании $('#selectitem').select2('data');, но при отправке формы передается только первый выбранный элемент.

фрагмент (это в шаблоне jinja2, приложении Flask, с UiKit3):

<form action="" method="post">
...
                        {% if param['param_type'] == 'list' %}
                          <select id="{{'node_%s' % param['node_id']}}" name="{{'node_%s' % param['node_id']}}" multiple='multiple' class="uk-select uk-form-width-large">
                            {% for p in param['param_value'] %}
                              <option value='{{ p }}'>{{ p }}</option>
                            {% endfor %}
                          </select>
                        {% else %}
                          <textarea id="{{'node_%s' % param['node_id']}}" name="{{'node_%s' % param['node_id']}}" class='uk-textarea uk-form-width-large'>{{ param['param_value'] }}</textarea>
                        {% endif %}
...
      <button type='submit' name='submit' class='uk-button-default'>Change Settings</button>
</form>

и select2 JS:

  $(document).ready(function() {
      $(".uk-select").select2({closeOnSelect: false});
  });

Все работает как положеноЗа исключением случаев, когда я проверяю возвращенные значения, передается только первый элемент, выбранный из каждого мультиселектора.

Я пытался присвоить name тега выбора значение name[], как предлагалось в другом месте, но это не имело никакого эффекта.Я много искал в Интернете решение, но оказалось пустым.

1 Ответ

0 голосов
/ 26 марта 2019

При выборе значения из раскрывающегося списка вы можете сохранить выбранные значения в переменной javascript и затем передать эту переменную на сервер с помощью вызова ajax.

Ниже приведен пример, в котором выбранные значения сохраняются в ajaxOptions.data.selectedValuesпри выборе значений из выпадающего списка.

var ajaxOptions = {};
var ajaxOptions.data = {};

$(".uk-select").change(function(){
    ajaxOptions.data.selectedValues = $(this).val();
    console.log(ajaxOptions);
  });

Пример JsFiddle: https://jsfiddle.net/g7nkfpca/

РЕДАКТИРОВАННЫЙ ОТВЕТ:

Вы можете использовать собственную отправку формы HTMLтоже.Для этого, прежде всего, вам нужно дать имя для выбора тега в формате массива , как показано ниже.

<select id="{{'node_%s' % param['node_id']}}" name="{{'node_%s' % param['node_id']}}[]" multiple='multiple' class="uk-select uk-form-width-large">

И в вашем PHP-коде итерируйте данные $_POST вполучить все выбранные опции по одному, см. код ниже.

// Check if any option is selected 
if(isset($_POST["node_XXX"]))  
{ 
   // Retrieving each selected option 
   foreach ($_POST['node_XXX'] as $node)  
   print "You selected $node<br/>"; 
} 

В коде выше XXX есть param['node_id'], который вы можете заменить.

...