栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

基于jQuery下拉选择框插件支持单选多选功能代码

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于jQuery下拉选择框插件支持单选多选功能代码

由于最近项目的需求,需要做一个下拉选择框的插件,支持单选显示表单数据,多选显示表格数据,该插件主要运用了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+="
"; gridhtml+=""; gridhtml+=""; $(customparams.currentTag).append(gridhtml); renderComboGrid(); initDataGrid(); }; var initDataGrid =function (){ $("#"+customparams.gridID).jqGrid({ datatype : 'local', autowidth: true, height:300, colNames: ["姓名", "编号", "单位","操作"], colModel: [ { name: "xm", index:"xm",align:"center",width:50,sortable: true}, { name: "bh", index:"bh", align:"center",width:50, sortable: true}, { name: "gydwName", index:"gydwName", align:"center",width:50,sortable: true}, { name: "customColumn",formatter:function(cellvalue, options, rowObject){ var obj = "{bh:" + """ + rowObject.bh + """ + ",rowId:" + """ + options.rowId + """ + "}"; var columnTemplate = "删除" return columnTemplate; }, align:"center",width:50,search:false,sortable: false} ], sortname: "bh", sortorder: "desc", rownumbers:true,//添加左侧行号 viewrecords: true, gridview: true, autoencode: true, caption: "罪犯信息列表", gridComplete: function(){ binCompleteEvent(); } }); }; var binCompleteEvent =function(){ //给操作栏绑定点击事件 $(".innerDelBtn").click(function(e){ var obj = eval("(" + $(e.target).attr("name") + ")"); deleteRow(obj.bh, obj.rowId); }); //选中行鼠标变为手型 var ids=$("#"+customparams.gridID).jqGrid('getDataIDs'); for(var i = 0; i < ids.length ; i ++){ var id = ids[i]; $("#"+id).attr("style","cursor:pointer"); } } var renderView = function(){ //根据isMultiselect判断那种渲染视图 options.isMultiselect==true?renderGrid():renderPanelView(); }; renderView(); //使用三元表达式判断返回的应是单个对象还是多个对象 return options.isMultiselect==false?customparams.resultObj:customparams.resultListObj; } }); })(jQuery);

以上所述是小编给大家介绍的基于jQuery下拉选择框插件支持单选多选功能代码的相关内容,希望对大家有所帮助!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/96376.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号