遇到一个需求,要做一个穿梭框的页面功能,最后选择了bootstrap的穿梭框,这个也是网上找的别人封装好的,原文地址 拿来之后结合项目加上EL表达式和jstl的c:foreach实现了这个功能。
Transfer.js:
/**
* Created by liwg on 2018/1/19.
*/
(function($, window, document) {
var transfer = function(el, options) {
this.option = options;
this.$el = $(el);
this.selectData = [];
this.unselectData = [];
this.init();
};
transfer.DEFAULTS = {
titles: ['待选列表', '已选列表'],
search: true, ///是否显示搜索查询
showRefresh: false, //
clickToSelect: true,
pagination: false, //是否支持分页
autoHeight: false,
url: '',
type: "get",
queryParams: {
},
contentType: 'application/json',
paginationDetail: false,
maxSelect: undefined,
uniqueId: "", //每行的id
dataSource: [], //默认数据源为同一个 内部会通过diffKey去区分是待选框的 还是已选框的数据,如果selectdataSource存在 则或解析为待选数据框里的数据
selectdataSource: undefined,
diffKey: 'flag',
selectColumns: [],
unselectColumns: []
};
transfer.prototype = {
init: function() {
this.initoption();
this.initContainer();
this.initBothTable();
if (this.option.url) {
this.initServer();
} else {
this.classifyData();
}
this.initEvent();
},
/*
* 渲染穿梭框页面结构*/
initContainer: function() {
var _this = this;
var containerHtml = ['<div class="col-sm-5 transferBox">',
'<h3 class="unselectTitle" style="margin: 0;padding: 5px 0 10px 0;">' + this.unselectTitle + '<span style="margin-left: 5px;">(<span id="checkedNum1"></span><span id="unselectTotalNum"></span>)</span></h3>',
'<table id="transferUnselectTable"></table>',
'</div>',
'<div class="col-sm-2 transferBtn" style="height: 100%">',
'<div class="btnList">',
'<span class="btn btn-default forwardBtn" ><i class="glyphicon glyphicon-forward"></i></span>',
'<span class="btn btn-default backwardBtn" ><i class="glyphicon glyphicon-backward"></i></span>',
'</div>',
'</div>',
'<div class="col-sm-5 transferBox">',
'<h3 class="selectTitle" style="margin: 0;padding: 5px 0 10px 0;">' + this.selectTitle + '<span style="margin-left: 5px;">(<span id="checkedNum2"></span><span id="selectTotalNum"></span>)</span></h3>',
'<table id="transferSelectTable"></table>',
'</div>'
].join('');
this.$el.html(containerHtml);
this.$unselectTable = this.$el.find('#transferUnselectTable'); //待选表格
this.$unselectTotalNum = this.$el.find('#unselectTotalNum'); //存放待选表格内总的数量
this.$checkedNum1 = this.$el.find('#checkedNum1'); //存放待选表格中已勾选的数量
this.$forwardBtn = this.$el.find('.forwardBtn'); //向待选表格内添加的按钮
this.$selectTable = this.$el.find('#transferSelectTable'); //已选表格
this.$selectTotalNum = this.$el.find('#selectTotalNum'); //存放已选表格内总的数量
this.$checkedNum2 = this.$el.find('#checkedNum2'); //存放已选表格中已勾选的数量
this.$backwardBtn = this.$el.find('.backwardBtn'); //向待选表格内添加的按钮
this.option.height = this.$el.outerHeight() - this.$el.find('h3.unselectTitle').outerHeight() - 8;
},
/*
* 参数处理*/
initoption: function() {
/*
* 两边标题参数处理*/
if (typeof this.option.titles == 'string' || (this.option.titles instanceof Array && this.option.titles.length == 1)) {
this.selectTitle = this.unselectTitle = this.option.titles + '';
} else if (this.option.titles instanceof Array && this.option.titles.length > 1) {
this.unselectTitle = this.option.titles[0];
this.selectTitle = this.option.titles[1];
}
/*
* 两个table渲染内容若一样,给任意一个columns即可*/
if (this.option.selectColumns instanceof Array && this.option.unselectColumns instanceof Array && (!this.option.selectColumns.length && this.option.unselectColumns.length)) {
this.option.selectColumns = JSON.parse(JSON.stringify(this.option.unselectColumns));
} else if (this.option.selectColumns instanceof Array && this.option.unselectColumns instanceof Array && (this.option.selectColumns.length && !this.option.unselectColumns.length)) {
this.option.unselectColumns = JSON.parse(JSON.stringify(this.option.selectColumns));
} else if (!this.option.selectColumns instanceof Array || !this.option.unselectColumns instanceof Array) {
console.error('参数selectColumns和unselectColumns必须为数组');
return false;
}
/*
* 两边table两边渲染选中的field不能一样,此处强制替换了,参数中可不写field*/
this.option.selectColumns[0].field = this

最低0.47元/天 解锁文章
244

被折叠的 条评论
为什么被折叠?



