我有一个使用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[]
,如其他地方所建议的但是没有效果。我已经在网上搜索了很多解决方案但是空洞了。
在从下拉列表中选择值时,可以将选定的值存储到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']
。