表单提交刷新后,如何保留多选下拉框的所有选中值?
解决多选Selectpicker刷新后仅保留最后一个选中值的问题
这个问题的核心原因有两个:一是你的<select>标签的name属性没有设置为数组格式,导致后端只能接收到最后一个选中项;二是判断选中状态的逻辑只针对单个值,无法匹配多选的数组结果。下面是具体的修复步骤:
1. 修改select的name属性为数组格式
把name="m_type"改成name="m_type[]",这样PHP的$_POST就能接收到所有选中值组成的数组,而不是仅最后一个值。
2. 调整选中状态的判断逻辑
原来的判断是检查$_POST['m_type']是否等于当前选项值,现在要改成检查当前值是否存在于$_POST['m_type']数组中。同时要先判断$_POST['m_type']是否存在且是数组,避免出现未定义索引或者非数组的报错。
修改后的完整代码
<select name="m_type[]" id="m_type" class="selectpicker form-control" title="Merchandiser type" multiple> <?php $SQL = "SELECT * FROM usertypes"; $run = mysqli_query($db, $SQL) or die ("SQL Error"); // 先获取提交的选中值数组,默认是空数组 $selectedTypes = isset($_POST['m_type']) && is_array($_POST['m_type']) ? $_POST['m_type'] : []; while($row = mysqli_fetch_array($run)) { $type = $row['merch_types']; // 检查当前类型是否在选中数组里 $isSelected = in_array($type, $selectedTypes) ? 'selected="selected"' : ''; ?> <option value='<?php echo $type; ?>' <?php echo $isSelected; ?>><?php echo $type; ?></option> <?php } ?> </select>
额外注意事项
如果修改后selectpicker的选中状态没有正确显示,可能是因为插件没有感知到DOM的变化,需要在页面加载完成后手动刷新插件:
$(document).ready(function(){ $('.selectpicker').selectpicker('refresh'); });
这样处理后,表单刷新或者提交后,所有选中的选项都会被正确保留啦。
内容的提问来源于stack exchange,提问作者Mohan Wijesena
相关产品推荐
相关产品推荐

