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


Posted in Javascript onJune 07, 2016

由于最近项目的需求,需要做一个下拉选择框的插件,支持单选显示表单数据,多选显示表格数据,该插件主要运用了jQuery与jqgrid以及easyui。

下面给大家展示下效果图,如果大家感觉还不错,请参考实现代码:

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

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

多选:呈现列表

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

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

具体代码如下所示:

/** 
 *下拉框插件-chooseList 
 *调用插件的方式以及格式: 
 * 1.首先你需要创建一个div面板,给div定义ID 
 * 2.在你所需要的地方调用插件: 
 * 参数说明: 
 * $("#divID").chooseList({ 
 * query_url :加载下拉框数据的URL,指定你所写编写的controller地址,如果URL为空则使用插件提供的默认URL 
 * divID:divID 
 * sidx:排序字段,默认罪犯编号 
 * sord:排序类型,默认desc 
 * postData: postData: {filters:JSON.stringify(filters)} 自定义查询条件 
 * filters的格式如下 
 *  var rules = []; 
   rules.push({"field":"gydwName","op":"cn","data":"xxxx"}); 
   var filters = {"groupOp":"AND","rules":rules}; 
   isMultiselect:是否多选,默认单选false 
 *   
 *  }) 
 * 
 * 
 */ 
(function ($) { 
  $.fn.extend({ 
    chooseList: function (options) { 
      //产生随机数 
      var random =Math.floor(Math.random()*100000+1); 
      /** 
      * 自定义参数,需要使用其中的属性直接:customparams.属性名 
      */ 
      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);  
      /** 
      * 解析载入参数 
      * @param query_url 请求的地址 
      * @param flag 标识是第一次加载表格还是模糊查询加载表格数据 
      */ 
      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; 
       }; 
     /** 
      * 绑定选择罪犯combogrid 
      */ 
     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);  
                    } 
                    }  
                  }); 
              }  
            }); 
        }; 
     /** 
      * 添加表格的行信息 
      * @param 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; 
        } 
     }; 
     /** 
      * 删除行指定列 
      * @param bh 编号 
      * @param rowId 行ID 
     */ 
     var deleteRow = function(bh,rowId){ 
        //删除集合中的元素 
        customparams.resultListObj.remove(bh);  
        //删除表格中的行 
        $("#"+customparams.gridID).delRowData(rowId); 
        //更改行号 
        customparams.countRow = customparams.countRow - 1;  
             }; 
       /** 
       * 转换对象时间戳类型的为yyyy-mm-dd字符串 
       * @parma data 数据 
       */ 
      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))); 
         } 
      }; 
      /** 
       * 日期类型转换成字符串型格式yyyy-MM-dd 
       * @param DateIn 转换对象 
       *       
       */ 
      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())); 
      }; 
       /** 
       * 自定义map 
       */ 
       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; 
          } 
      }; 
     /** 
      * 渲染panel视图 
      */ 
      var renderPanelView = function(){ 
       var html = ""; 
      html+="请选择:<input id='"+customparams.chooseID+"' style='width:200px'/>"; 
      html+="<form id='"+customparams.formID+"'>"; 
      html+="<table>"; 
      html+="<tr>"; 
      html+="<th>姓名:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px ' readonly='true' type='text' id='xm' name='xm' /></td>"; 
      html+="<th>编号:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true' type='text' id='bh' name='bh' /></td>"; 
      html+="<th>单位:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true' type='text' id='gydwName' name='gydwName' /></td>"; 
      html+="<th>入监时间:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true' type='text' id='rjrq' name='rjrq' /></td>"; 
      html+="<td rowspan='7' style='text-align: center'><img src='' width='140' height='200' alt='' /></td>"; 
      html+="</tr>"; 
      html+="<tr>"; 
      html+="<th>出生日期:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='csrq' name='csrq' /></td>"; 
      html+="<th>身份证号:</th>" 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='sfzh' name='sfzh' /></td>"; 
      html+="<th>原判刑期:</th>" 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='xq' name='xq' /></td>"; 
      html+="<th>当前刑期:</th>" 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='dqxq' name='dqxq' /></td>"; 
      html+="</tr>"; 
      html+="<tr>"; 
      html+="<th>刑期起日:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='dqxqqr' name='dqxqqr' /></td>"; 
      html+="<th>刑期止日:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='dqxqzr' name='dqxqzr' /></td>"; 
      html+="<th>处遇等级:</th>"; 
      html+=" <td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='cydjname' name='cydjname' /></td>"; 
      html+="<th>分押类型:</th>" 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='fylxName' name='fylxName' /></td>"; 
      html+="</tr>"; 
      html+="<tr>"; 
      html+="<th>余刑:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='yx' name='yx' /></td>"; 
      html+="<th>军警经历</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='jjjlName' name='jjjlName' /></td>"; 
      html+="<th>特管类别:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='tglb' name='tglb' /></td>"; 
      html+=" <th>累惯犯:</th>" 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='lgfEnum' name='lgfEnum' /></td>" 
      html+="</tr>"; 
      html+="<tr>"; 
      html+="<th>是否老犯:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='isSflf' name='isSflf' /></td>"; 
      html+="<th>是否病犯:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='issfbf' name='issfbf' /></td>"; 
      html+="<th>是否残犯:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='issfcf' name='issfcf' /></td>"; 
      html+="<th>是否危险犯:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='issfwxf' name='issfwxf' /></td>"; 
      html+="</tr>"; 
      html+="<tr>"; 
      html+=" <th>职务犯:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='isZwf' name='isZwf' /></td>"; 
      html+="<th>家庭住址:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='familyAddressDetail' name='familyAddressDetail' /></td>"; 
      html+="<th>罪名:</th>"; 
      html+="<td><input  style='border-left:0px;border-top:0px;border-right:0px;border-bottom:1px 'readonly='true'type='text' id='accusationId' name='accusationId' /></td>"; 
      html+=" </tr>"; 
      html+=" </table>"; 
      html+="</form>"; 
      $(customparams.currentTag).append(html); 
       renderComboGrid(); 
      }; 
      /*******************渲染dtaGrid部分*********************/ 
      /** 
      * 渲染dataGrid表格 
      */ 
      var renderGrid = function(){ 
        var gridhtml =""; 
        gridhtml+="请选择罪犯:<input id='"+customparams.chooseID+"' style='width:200px'/>"; 
        gridhtml+="<div>"; 
        gridhtml+="<table id='"+customparams.gridID+"'></table> "; 
        gridhtml+="<div id='"+customparams.pager+"'></div>"; 
        gridhtml+="</div>";  
        $(customparams.currentTag).append(gridhtml); 
        renderComboGrid(); 
        initDataGrid(); 
      }; 
      /** 
      * 加载dataGrid表格数据 
      */ 
      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 = "<span class='btn_orange innerDelBtn' name='"+ obj +"' >删除</span>" 
              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"); 
           } 
      } 
      /*******************渲染dtaGrid部分结束*********************/ 
      /** 
      * 根据类型渲染视图 
      */ 
      var renderView = function(){ 
       //根据isMultiselect判断那种渲染视图 
       options.isMultiselect==true?renderGrid():renderPanelView(); 
      }; 
      /*** 
       * 初始化入口 
       */ 
      renderView(); 
     //使用三元表达式判断返回的应是单个对象还是多个对象 
     return options.isMultiselect==false?customparams.resultObj:customparams.resultListObj; 
    } 
    }); 
  })(jQuery);

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

Javascript 相关文章推荐
借用Google的Javascript API Loader来加速你的网站
Jan 28 Javascript
javascript学习笔记之10个原生技巧
May 21 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
May 19 Javascript
Node.js Streams文件读写操作详解
Jul 04 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
Oct 09 Javascript
js控制按钮,防止频繁点击响应的实例
Feb 15 Javascript
javascript简单链式调用案例分析
May 10 Javascript
Javascript es7中比较实用的两个方法示例
Jul 21 Javascript
js实现移动端轮播图效果
Dec 09 Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 Javascript
深入分析element ScrollBar滚动组件源码
Jan 22 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
Apr 29 Javascript
jQuery原理系列-css选择器的简单实现
Jun 07 #Javascript
javascript实现抽奖程序的简单实例
Jun 07 #Javascript
浅谈javascript中new操作符的原理
Jun 07 #Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 #Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 #Javascript
浅析BootStrap栅格系统
Jun 07 #Javascript
浅谈jQuery 选择器和dom操作
Jun 07 #Javascript
You might like
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
PHP面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
php扩展开发入门demo示例
2019/09/23 PHP
jQuery 使用手册(四)
2009/09/23 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
收集的10个免费的jQuery相册
2011/02/26 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
vue.js实现的绑定class操作示例
2018/07/06 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
数据库笔试题
2013/05/09 面试题
地质灾害防治方案
2014/05/14 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
汽车转让协议书
2015/01/29 职场文书