Javascript函數中的arguments.callee用法實例分析
733
2024-02-18
由于最近項目的需求,需要做一個下拉選擇框的插件,支持單選顯示表單數據,多選顯示表格數據,該插件主要運用了jQuery與jqgrid以及easyui。
下面給大家展示下效果圖,如果大家感覺還不錯,請參考實現代碼:
多選:呈現列表
具體代碼如下所示:
/** *下拉框插件-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='http://www.gimoo.net/t/1902/5c613469ccdd5.html' 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下拉選擇框插件支持單選多選功能代碼的相關內容,希望對大家有所幫助!
#免責聲明#
本站[綠夏技術導航]提供的一切軟件、教程和內容信息僅限用于學習和研究目的;不得將上述內容用于商業或者非法用途,否則,一切后果請用戶自負。本站信息來自網絡收集整理,版權爭議與本站無關。您必須在下載后的24個小時之內,從您的電腦或手機中徹底刪除上述內容。如果您喜歡該程序或內容,請支持正版,購買注冊,得到更好的正版服務。我們非常重視版權問題,如有侵權請郵件[admin@lxwl520.com]與我們聯系進行刪除處理。敬請諒解!