一行多列的下拉多选框
来源:互联网 发布:淘宝后台操作流程 编辑:程序博客网 时间:2024/06/10 12:10
一行多列的下拉多选框
很简单的一行多列的下拉多选框,就当是学习编写jquery插件的例子,该例子依赖jquery
相关js代码:
/** * 下拉多选插件,支持一行显示过个input框,显示多行 * by warhorse */(function($){ "use strict"; var SelectCheckBox = function(element, options){ this.$element = $(element); this.options = $.extend({}, SelectCheckBox.DEFAULTS, options); //使用jQuery.extend 覆盖插件默认参数 // 多选框的名称 if(!this.options.inputName){ this.options.inputName = this.$element.attr("name"); if(!this.options.inputName){ this.options.inputName = this.$element.attr("id"); this.options.inputName = this.options.inputName; } } // 获取并转换list为数组,支持数组类型[{'code':1, 'name':'aa'}],支持字符串类型:"1:aa;2:bb",支持对象{1:'aa', 2:'bb'} if(!this.options.list){ this.options.list = this.$element.attr("list"); } if(this.options.list && !$.isArray(this.options.list)){ // 1:aa;2:bb var list = []; var listType = typeof this.options.list; if(listType === 'string'){ var entries = this.options.list.split(';'); for(var i = 0; entries && i < entries.length; i++){ var entry = entries[i]; var values = entry.split(":"); list.push({'code': values[0], 'name':values[1]}); } }else if(listType === 'object'){ for(var key in this.options.list){ list.push({'code': key, 'name':this.options.list[key]}); } } // this.options.list = list; } // 获取并转换data,支持数组类型[1,2,3],支持字符串类型:"1,2,3" if(!this.options.data){ this.options.data = this.$element.attr("data"); } if(this.options.data && !$.isArray(this.options.data)){ this.options.data = this.options.data.split(','); } }; SelectCheckBox.DEFAULTS = { list: null, // 支持数组类型[{'code':1, 'name':'aa'}],支持字符串类型:"1:aa;2:bb" data: '', // 支持数组类型[1,2,3],支持字符串类型:"1,2,3" col: 4, //默认一行4个 formatter: null, seperator: ',', noneSelectedText: '请选择', width: 100, height: 100, onchange: null }; SelectCheckBox.prototype.create = function () { var opts = this.options; // li的宽度百分比 var liWidth = 100 / opts.col; liWidth += '%'; var width = this.$element.attr("width"); if(!width){ width = this.$element.width(); } var lis = ''; var title = ''; // 选中值对应的文字 for(var i = 0; i < opts.list.length; i++){ var entry = opts.list[i]; var checked = false; for(var j = 0; opts.data && j < opts.data.length; j++){ if(entry['code'] == opts.data[j]){ checked = true; title += entry['name'] + opts.seperator; } } if(opts.formatter){ var inputHtml = opts.formatter.call(this, entry, checked); lis += '<li align="left" style="width:'+liWidth+'">'+inputHtml+'</li>'; }else{ var checkedStr = checked ? 'checked="checked"' : ''; lis += '<li align="left" style="width:'+liWidth+'"><label><input type="checkbox" name="'+opts.inputName+'" value="'+entry['code']+'" '+checkedStr+'/>'+entry['name']+'</label></li>'; } } if(title){ if(opts.seperator){ title = title.substring(0, title.length - opts.seperator.length); } }else{ title = opts.noneSelectedText; } // 主要的html代码 var div = '<div class="selectCheckbox" id="scb_'+opts.inputName+'" style="width:100%; height:100%;cursor:pointer;">' + '<div class="inputDiv" style="width:'+width+'px;overflow:hidden;">' + '<p>'+title+'</p>' + '</div>' + '<div class="selectDiv" style="position:absolute; width:'+width+'px; display: none;" >' + '<ul>' + lis + '</ul>' + '</div>' + '</div>'; this.$element.append(div); }; // 绑定事件 SelectCheckBox.prototype.bindEvent = function(){ var self = this; var $this = this.$element; var opts = this.options; // 绑定事件 var inputDiv = $this.find(".inputDiv"); var selecDiv = $this.find(".selectDiv"); // 点击显示下拉框事件 inputDiv.bind('click', function(){ selecDiv.toggle(); }); // 鼠标离开选择面板隐藏下拉框事件 $this.bind('mouseleave',function(){ selecDiv.hide(); }); // 选择值后将选中的值显示在显示框上的事件 selecDiv.find("input").bind('click',function(){ self.fefresh(); }); }; // 刷新显示 SelectCheckBox.prototype.fefresh = function(){ var self = this; var opts = this.options; var $this = this.$element; var data = []; var title = ''; $this.find("input:checked").each(function(){ title += $(this).parent("label").text() + opts.seperator; data.push($(this).val()); }); if(title){ if(opts.seperator){ title = title.substring(0, title.length - opts.seperator.length); } }else{ title = opts.noneSelectedText; } $this.find(".selectCheckbox").find(".selectDiv").prev(".inputDiv").find("p").text(title); // 执行回调函数 if(opts.onchange){ opts.onchange.call(self, data.toString()); } // opts.data = data; }; // 全不选 SelectCheckBox.prototype.clear = function(){ this.$element.find("input").attr("checked", false); this.fefresh(); }; // 全选 SelectCheckBox.prototype.selectAll = function(){ this.$element.find("input").attr("checked", true); this.fefresh(); }; // 设置选中的值 SelectCheckBox.prototype.setData = function(data){ if(data && !$.isArray(data)){ data = data.split(','); } if(data && data.length > 0){ this.$element.find("input").each(function(){ var val = $(this).val(); if($.inArray(val, data) > -1){ $(this).attr("checked", true); } }); // this.fefresh(); } return this; }; // 获取选中的值 SelectCheckBox.prototype.getSelected = function(){ return this.options.data; }; $.fn.selectCheckBox = function(options){ var $this = $(this); // 判断是否初始化过的依据 var scb = $this.data('selectCheckBox'); if(!scb){ var opts = typeof options == 'object' && options; // 初始化并缓存 $this.data('selectCheckBox', (scb = new SelectCheckBox(this, opts))); // 创建节点 scb.create(); // 绑定事件 scb.bindEvent(); } // 调用方法 if (typeof options === 'string') { if(scb){ var fn = scb[options]; if (!fn) { throw ("selectCheckBox - No such method: " + options); } var args = $.makeArray(arguments).slice(1); return fn.apply(scb, args); } } return scb; };})(jQuery);
相关css
.selectCheckbox .inputDiv{ height:20px; line-height:20px; padding:2px 5px; border:1px solid #CFCFCF; background-color: rgba(255, 255, 255, 1); background-image: url('${ctx}/resource/images/arrow3_d.png'); background-repeat: no-repeat; background-position: 99% 50%;}.selectCheckbox .selectDiv{ padding:2px 5px; border:1px solid #CFCFCF; background-color: #F8F8F8; z-index: 1000; height: auto; line-height: 31px;}.selectCheckbox li{ list-style-type: none; float: left;}
调用方式:
- html写法
<div name="outOrgType"></div>
- 调用js写法:
$("div[name='outOrgType']").selectCheckBox({ list: '1:aa;2:bb;3:cc', // 支持数组类型[{'code':1, 'name':'aa'}],支持字符串类型:"1:aa;2:bb" data: '1,2', // 支持数组类型[1,2,3],支持字符串类型:"1,2,3" col: 4, //默认一行4个 formatter: null, seperator: ',', // 标题显示的分隔符 noneSelectedText: '请选择', //没有选项的时候显示的标题 onchange: null // 点击选中项的回调函数});
示例图
阅读全文
0 0
- 一行多列的下拉多选框
- ext表單中一行多列的布局
- 多列下拉框的实现
- 多列下拉框
- repeater 一行显示多列
- NiceLabel一行多列的条码标签如何打印?
- 行转列,多列的数据合并为一行,行转换
- sql server中将一列多行的数据转成一列一行,和一行数据解析成一行多列
- 一行排奇数列的HTML排版
- Combox 下拉显示多列
- android实现多列显示的下拉列表框-Spinner
- android实现多列显示的下拉列表框-Spinner
- 取一行多列数据中的最大值
- 不使用float实现一行多列
- Java 读取TXT一行多列数据
- 数据库一列多行转一行多列
- MySQL一行多列求和sum()函数
- sql 多行转换为一行(STUFF及PIVOT的用法) ||SQL 合并列值和拆分列值
- 【tensorflow实战笔记-分类篇】思路构思
- BZOJ1046 [HAOI2007]上升序列 【LIS + 字典序最小】
- js、函数、对象、arguments
- Python Tips
- Mongodb更新数组操作$each修饰符
- 一行多列的下拉多选框
- Mysql数据类型
- jmeter参数化
- java的socket编程简介(4)
- NX7 Open Wizard for Visual Studio 2010
- IT男:拿什么拯救我被工作捆绑的人生?
- 教你轻松入门Linux下用gdb调试
- codeforces #448(div 2) A. Pizza Separation
- 智能指针的一点点使用方法