由于最近项目的需求,需要做一个下拉选择框的插件,支持单选显示表单数据,多选显示表格数据,该插件主要运用了jQuery与jqgrid以及easyui。
下面给大家展示下效果图,如果大家感觉还不错,请参考实现代码:
多选:呈现列表
具体代码如下所示:
(function ($) {
$.fn.extend({
chooseList: function (options) {
//产生随机数
var random =Math.floor(Math.random()*100000+1);
var customparams = {
resultObj : {},//存储单选选择的后的数据,返回给外界调用者使用
resultListObj : new map(),//存储多选选择的后的数据,返回给外界调用者使用
currentTag : this,//当前标签对象
formID: "form_"+random,
chooseID : "sel"+"_"+random,//下拉选择框的ID
gridID :"grid"+"_"+random,//dataGrid的ID
pager : "pager"+"_"+random,//分页ID
countRow :0//计数行号,默认为0
};
var defaults = {
_search:"false",
//如果未传入url,则使用默认的url进行查询
query_url :contextPath + "/chooseCriminal",
sidx:"bh",//排序字段,默认根据罪犯的编号bh
sord: "desc",//排序类型:升序,降序 ,默认降序
isMultiselect:false,//是否多选,默认单选
};
var options = $.extend(defaults, options);
var bindParams = function(query_url){
var params="";//存储解析的参数
for(var attr in options){
var key = attr;
var value = options[attr];
if(value != "" && !(value instanceof Object)&key!="query_url"&&key!="divID"&&key!=false){
params+=key+"="+value+"&"
}else if(value instanceof Object){
params+=$.param(value)+"&"
}else if(key=="_search"&&value==false){
params+=key+"=false&";
}
}
var finalParams =query_url+"?"+params.substring(0,params.length-1);
return finalParams;
};
var renderComboGrid = function(){
$("#"+customparams.chooseID).combogrid({
panelWidth: 500,
idField: 'bh',//id
textField: 'xm',//input显示值
pagination : true,//是否分页
pageSize: 10,//每页显示的记录条数,默认为10
rownumbers:true,//序号
url: bindParams(options.query_url),
method: 'get',
fitColumns: true,
columns: [[
{field:'xm',title:'姓名',width:80},
{field:'bh',title:'编号',width:120},
{field:'gydwName',title:'单位',width:80},
]],
keyHandler:{
query:function(keyword){//动态搜索
var value =keyword;
//装载动态输入参数
if(options.postData!=null&&options.postData!=undefined){
var oldRules = JSON.parse(options.postData.filters);
var newRules =[
{"field":"xm","op":"cn","data":value},
(oldRules.rules)[0]
];
var filters = {"groupOp":"AND","rules":newRules};
options = $.extend(defaults, {postdata: {filters:JSON.stringify(filters)}});
}else{
var newRules =[
{"field":"xm","op":"cn","data":value}
];
var filters = {"groupOp":"AND","rules":newRules};
options = $.extend(defaults, {querydata: {filters:JSON.stringify(filters)}});
}
//将输入的值设置至输入框中
$("#"+customparams.chooseID).combogrid('setValue', value);
//重新请求后台加载表格
$("#"+customparams.chooseID).combogrid("grid").datagrid({url:bindParams(options.query_url)});
}
},
onSelect:function(){//选中事件
var bh= $("#"+customparams.chooseID).combogrid('grid').datagrid('getSelected').bh;//获取选中行数据的编号
//根据罪犯编号获取罪犯的详细信息ajax
$.ajax({
type : 'POST',
url : contextPath + "/chooseList/query",
data:{bh:bh},
success : function(data) {
//填充表单
PlatformUI.populateForm(customparams.formID, data);
//转换对象中包含时间类型的数值
convertDateObject(data);
//判断当前用户引用的是单选,还是多选
if(options.isMultiselect==false){//单选
$.extend(customparams.resultObj, data);
}else{//多选
addRowData(data);
$.extend(customparams.resultListObj, data);
}
}
});
}
});
};
var addRowData = function(data){
//判断当前对象是否已经存在resultesObj中,如果存在则不保存,反之则保存
if(!(customparams.resultListObj.containsKey(data.bh))){
customparams.resultListObj.put(data.bh,data);
//获取行数据
var rowData = {xm:data.xm, bh:data.bh, gydwName:data.gydwName};
customparams.countRow = customparams.countRow+1;
//添加行
$("#"+customparams.gridID).addRowData(customparams.countRow, rowData);
var totalRecord = customparams.resultListObj.size();//总条数
}else{
//提示
toastr.warning("数据已被选择!");
return;
}
};
var deleteRow = function(bh,rowId){
//删除集合中的元素
customparams.resultListObj.remove(bh);
//删除表格中的行
$("#"+customparams.gridID).delRowData(rowId);
//更改行号
customparams.countRow = customparams.countRow - 1;
};
var convertDateObject = function(data) {
if(data.rjrq!=null&&data.rjrq!=undefined){
$("#rjrq").val(DateToString(new Date(data.rjrq)));
}
if(data.csrq!=null&&data.csrq!=undefined){
$("#csrq").val(DateToString(new Date(data.csrq)));
}
if(data.dqxqqr!=null&&data.dqxqqr!=undefined){
$("#dqxqqr").val(DateToString(new Date(data.dqxqqr)));
}
if(data.dqxqzr!=null&&data.dqxqzr!=undefined){
$("#dqxqzr").val(DateToString(new Date(data.dqxqzr)));
}
};
var DateToString = function(DateIn) {
return DateIn.getFullYear()
+ '-'
+ (DateIn.getMonth() + 1 >= 10 ? DateIn
.getMonth() + 1 : '0'
+ (DateIn.getMonth() + 1))
+ '-'
+ (DateIn.getDate() >= 10 ? DateIn.getDate()
: '0' + (DateIn.getDate()));
};
function map () {
this.elements = new Array();
//得到map的大小
this.size = function() {
return this.elements.length;
}
//判断是否为空
this.isEmpty = function() {
return (this.elements.length < 1);
}
//清空
this.clear = function() {
this.elements = new Array();
}
//放进map一个对象
this.put = function(_key, _value) {
this.elements.push( {
key : _key,
value : _value
});
}
//根据键去除一个对象
this.remove = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key && typeof this.elements[i].key == typeof _key) {
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
}
//根据键得到一个对象
this.get = function(_key) {
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key && typeof this.elements[i].key == typeof _key) {
return this.elements[i].value;
}
}
} catch (e) {
return null;
}
}
//返回指定索引的一个对象
this.element = function(_index) {
if (_index < 0 || _index >= this.elements.length) {
return null;
}
return this.elements[_index];
}
//是否包含键
this.containsKey = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key && typeof this.elements[i].key == typeof _key) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
}
//是否包含值
this.containsValue = function(_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value && typeof this.elements[i].value == typeof _value) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
}
//得到所有的值
this.values = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].value);
}
return arr;
}
//得到所有的键
this.keys = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].key);
}
return arr;
}
};
var renderPanelView = function(){
var html = "";
html+="请选择:";
html+="";
$(customparams.currentTag).append(html);
renderComboGrid();
};
var renderGrid = function(){
var gridhtml ="";
gridhtml+="请选择罪犯:";
gridhtml+="";
gridhtml+="以上所述是小编给大家介绍的基于jQuery下拉选择框插件支持单选多选功能代码的相关内容,希望对大家有所帮助!



