基于jQuery下拉選擇框插件支持單選多選功能代碼
更新時間:2016年06月07日 15:56:17 作者:咩咩文
這篇文章主要介紹了基于jQuery下拉選擇框插件支持單選多選功能代碼的相關資料,需要的朋友可以參考下
由于最近項目的需求,需要做一個下拉選擇框的插件,支持單選顯示表單數據,多選顯示表格數據,該插件主要運用了jQuery與jqgrid以及easyui。
下面給大家展示下效果圖,如果大家感覺還不錯,請參考實現代碼:


多選:呈現列表


具體代碼如下所示:
/**
*下拉框插件-chooseList
*調用插件的方式以及格式:
* 1.首先你需要創(chuàng)建一個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){//動態(tài)搜索
var value =keyword;
//裝載動態(tài)輸入參數
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)));
}
};
/**
* 日期類型轉換成字符串型格式y(tǒng)yyy-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>入監(jiān)時間:</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);
});
//選中行鼠標變?yōu)槭中?
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下拉選擇框插件支持單選多選功能代碼的相關內容,希望對大家有所幫助!
您可能感興趣的文章:
相關文章
Jquery圖片延遲加載插件jquery.lazyload.js的使用方法
這篇文章主要介紹了Jquery圖片延遲加載插件jquery.lazyload.js的使用方法,需要的朋友可以參考下2014-05-05
通過jquery的$.getJSON做一個跨域ajax請求試驗
jquery提供了$.getJSON的方法,讓我們可以實現跨域ajax請求,但jqueryAPI上的內容實在太少,如何用$.getJSON,請求網站應該返回怎樣的數據庫才能讓$.getJSON獲取到,下面我就用一個實際例子來說明下。2011-05-05
AMD異步模塊定義介紹和Require.js中使用jQuery及jQuery插件的方法
這篇文章主要介紹了AMD異步模塊定義介紹和Require.js中使用jQuery及jQuery插件的方法,需要的朋友可以參考下2014-06-06
Query中click(),bind(),live(),delegate()的區(qū)別
這篇文章主要介紹了Query中click(),bind(),live(),delegate()之間的區(qū)別。需要的朋友可以過來參考下,希望對大家有所幫助2013-11-11

