Select2 multiselect仅返回第一个选定的项目

问题描述 投票:0回答:1

我有一个使用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});
  });

一切都按预期工作,除非我检查返回的值,只传递每个多选的第一个项目。

我已经尝试将select标签的name命名为name[],如其他地方所建议的但是没有效果。我已经在网上搜索了很多解决方案但是空洞了。

jquery-select2 jquery-select2-4
1个回答
0
投票

在从下拉列表中选择值时,可以将选定的值存储到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']

© www.soinside.com 2019 - 2024. All rights reserved.