基于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 相关文章推荐
javascript 学习笔记(八)javascript对象
Apr 12 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
Nov 05 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
Jan 24 Javascript
js控制分页打印、打印分页示例
Feb 08 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
Jun 26 Javascript
JS获取鼠标坐标位置实例分析
Jan 20 Javascript
详解如何在Angular中快速定位DOM元素
May 17 Javascript
ligerUI---ListBox(列表框可移动的实例)
Nov 28 Javascript
实例讲解Vue.js中router传参
Apr 22 Javascript
Vue实现商品详情页的评价列表功能
Sep 04 Javascript
layui layer select 选择被遮挡的解决方法
Sep 21 Javascript
angular中的post请求处理示例详解
Jun 30 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
XAMPP安装与使用方法详细解析
2013/11/27 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
node中IO以及定时器优先级详解
2019/05/10 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
django之session与分页(实例讲解)
2017/11/13 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
tensorboard显示空白的解决
2020/02/15 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
乌克兰设计师和品牌的服装:Love&Live
2020/04/14 全球购物
学生旷课检讨书500字
2014/10/28 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
五年级下册复习计划
2015/01/19 职场文书
员工规章制度范本
2015/08/07 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android