使用select2插件 多选存值,多值回显

本文介绍如何在网页中使用Select2插件实现多选功能,包括引入资源文件、编写JSP页面代码、取值与回显方法,以及解决回显时遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用select2插件 多选存值,多值回显,及遇到的坑~~~~

1.引入js css文件

<link href="${ctxStatic}/jquery-select2/3.4/select2.min.css?v=<%=vs %>" rel="stylesheet" />
<script src="${ctxStatic}/jquery-select2/3.4/select2.min.js" type="text/javascript"></script>

2.jsp页面标签写法

<div>
	<select id="sel_expert" class="form-control" multiple="multiple" 
	onchange="$('#hid_expert').val($('#sel_expert').val());">
		<c:forEach items="${experts }" var="expert">
			<option value="${expert.id }" >${expert.expert_name }</option>
		</c:forEach>
	</select>
	<!-- 用于保存值,传到后台 -->
	<input id="hid_expert" name="expert" value="${expertIds }" type="hidden">
</div>

3.取值、回显

var expertIdsStr = $("#hid_expert").val();// 取值
if (expertIdsStr) {
	var arr = expertIdsStr.split(",");
	$("#sel_expert").select2({
		placeholder : '请选择评价专家',
		maximumSelectionLength:2,
		allowClear : false
	});
	// 回显时,使用以下三种方式都可以
	//.val( arr ).trigger("change");
	//$("#sel_expert").val(arr).trigger("change");
	$("#sel_expert").select2('val', arr);
}

4.回显时需要注意:如果arr中的值,任何一个值都不会与select的option中value值重合,那么即使回显的方法是对的,select2也不会回显。。。
我就是死在了这里。。。数据回显做了好几个小时。。。。在此记录~~~

### 解决 Element UI `el-select` 回显问题 对于Element UI中的`el-select`组件,在模式下实现项的正确回显是一个常见的需求。当遇到回显失败的情况时,通常是因为绑定的数据模型(`v-model`)未能正确反映已择项的状态。 为了确保`el-select`能够正确示之前保择状态,需要注意几个方面: 1. **数据结构匹配** 组件内部处理的是对象数组作为其`value`属性,这意味着如果要设置默认中项,则这些项也应当是以相同形式在的对象列表[^2]。因此,确认服务器端返的数据格式与前端定义的一致非常重要。 2. **唯一键配置** 使用`:key`或`:row-key`来指定每一项的独特标识符可以提高渲染效率并帮助框架识别哪些项目已经被择了。这一步骤尤其适用于表格和复杂表单场景下的控件[^3]。 3. **强制更新机制** 如果发现即使设置了正确的初始也无法触发视图层面上的变化,可能需要借助Vue提供的API `$forceUpdate()` 来通知虚拟DOM重新计算差异并应用到实际页面上[^4]。 下面给出一段具体的代码示例用于说明如何解决这个问题: ```html <template> <div id="app"> <!-- 表单项 --> <el-form-item label="标签" prop="tagView"> <el-select v-model="selectedOptions" multiple placeholder="请择"> <el-option v-for="(item, index) in options" :key="index" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <!-- 按钮用于模拟加载预设--> <button @click="loadPreSelected">Load Pre-selected</button> </div> </template> <script> export default { data() { return { selectedOptions: [], // 当前被中的option集合 options: [ { value: 'node_1', label: 'Node One' }, { value: 'node_2', label: 'Node Two' } ] }; }, methods: { loadPreSelected() { const preSelections = ['node_1']; // 假定这是从后台获取到的历史记录 this.selectedOptions = preSelections.map(value => ({ value, label: this.options.find(option => option.value === value).label })); this.$nextTick(() => { this.$forceUpdate(); // 强制刷新以使新加入的择生效 }); } } }; </script> ``` 通过上述方法调整后,应该能有效改善`el-select`在情况下的表现,使其不仅支持正常的交互操作还能良好地完成历史择的记忆功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值