Bootrap3 slelet 下拉多选 配合TP5怎么实现
曾在项目中遇到过几次,无奈之前太懒没有保存代码的习惯以至于每次都重写,今天记录一下,做个了断。
直接上代码
- 首先引入bootrap3 文件资源
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/css/bootstrap-select.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/bootstrap-select.min.js"></script>
<!-- (Optional) Latest compiled and minified JavaScript translation files -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/i18n/defaults-zh_CN.min.js"></script>
- 编写Select 样式
<div style="display: inline-block;width: 200px;" id="ooxx">
<select class="selectpicker form-control form-control" id="approverq" style="width: 200px;" multiple data-max-options="100" >
<foreach name="channel_list" item="vo">
<option value="{$vo.channel}">{$vo.channel}</option>
</foreach>
</select>
</div>
这里为了方便直接在最外层的div设置一个id
问题
这里表单提交的时候,select 只会上传一个定值过来
解决
添加一个隐藏域
表单的submit 添加一个onclick方法处理选中的option
### 添加隐藏域
<input type="hidden" id="hidden_channel" name="channel" value="{$channel}"/>
### 表单添加一个onclick 事件
<input type="submit" class="btn btn-primary" value="搜索" onclick="fun()"/>
### js代码如下
function fun(){
var str=[];
var obj = document.getElementById("approverq");
for(var i=0;i<obj.options.length;i++){
if(obj.options[i].selected){
str.push(obj.options[i].value);// 收集选中项
}
}
#隐藏域赋值
$("#hidden_channel").val(str);
}
到此,表单就能够提交多值到后台了。
问题
后续页面刷新后,select 不会选中的option选项。这要如何解决呢?
解决
js在加载的时候处理
$(function(){
let str = "{$channel}"; # {$channel} 这个是后台传递过来的值。格式:xxxx,xxxxx,oooxxx
var arr = str.split(',');# 字符串按逗号拆分成数组
$('#approverq option').each(function (){ # 遍历option
if($.inArray($(this).val(), arr) !=-1){ # 当前的option 存在 arr中的话给选中状态
$(this).attr("selected",true)
}
})
});
完美解决!!!!

浙公网安备 33010602011771号