基于jquery扩展漂亮的下拉框可以二次修改


Posted in Javascript onNovember 19, 2013

继续发一篇关于web前端自定义控件——ComboBox(下拉框),以往我在使用下拉框控件老是为了样式丑陋而烦恼,现在分享这个控件,希望有用的同仁们可以收藏,或进行二次修改,达到你想要的效果。

分解自定义下拉框:

1.创建构造函数,初始化赋值控件值。

2.绑定控件呈现在前台。

3.点击下拉框控件,展示下拉列表

4.点击触发下拉框控件,收起下拉列表。

5.点击下拉项触发事件。

代码如下:

Html代码:

<b class="select_type"></b>

css样式:
.dropdown span a{float:left;background:url(/img/Icon_BG.png);} 
/*下拉框 http://power.76741.com*/ 
.dropdown span a{background-position: -213px -75px;} 
.dropdown{float:left;width:105px;} 
.dropdown span{border:solid 1px #ccc;width:95%;height:28px;background:url(/img/tbline_bg.png);border-radius:8px;overflow:hidden;} 
.dropdown span{float:left;padding-left:10px;line-height:28px; cursor:pointer;} 
.dropdown span.active{border-radius:8px 8px 0px 0px;} 
.dropdown span font{width:auto;margin-right: 0px;float:left;} 
.dropdown span a{float:right;width:20px;height:20px;margin:4px 0;} 
.dropdown p{border:solid 1px #ccc;border-top:0px;width:103px;display:none;position:absolute;margin-top:28px;background-color:#fff;z-index:3;max-height:280px;overflow-y: auto; overflow-x: hidden;} 
.dropdown p a{float:left;line-height:28px;height:28px;padding-left:10px;color:#666;font-size:14px;cursor:default;text-align:left;width:100%;overflow:hidden;} 
.dropdown p a:hover{background:url(/img/tbline_bg.png);color:#666;}

Js代码:

1、自定义类:

//下拉框 
var ComboBox = function () { 
this.tag; 
this.data_default; 
this.data_list; 
this.index = 0; var _this = this; 
var _index, _tag, _value; 
//初始化 
this.init = function () { 
_tag = _this.tag; 
_index = _this.index; 
//设置对象 
_this.setDropdown(_this.data_default, _this.data_list); 
//赋值绑定事件 
if (_tag.find('span font').length > 0) _value = _tag.find('span font').attr('_id'); 
if (_tag == undefined) { return false; } 
_this.showEvent(); 
_this.selectedIndex(_index); 
return true; 
} 
//设置下拉列表 
this.setDropdown = function (default_data, list) { 
var css = _tag.attr('class'); 
if (default_data == undefined) { 
default_data = { id: 'null', name: '' }; 
} 
var _html = ''; 
if (_tag.find('p').length > 0 && _tag.find('span').length > 0) { 
$.each(list, function (i, value) { 
_html += '<a _id="' + value.id + '">' + value.name + '</a>'; 
}); 
_tag.find('span font').replaceWith('<font _id="' + default_data.id + '">' + default_data.name + '</font>'); 
_tag.find('p').html(_html); 
} else { 
_html = '<div class="dropdown ' + css + '">'; 
_html += '<span><font _id="' + default_data.id + '">' + default_data.name + '</font><a></a></span>'; 
_html += '<p>'; 
if (list) { 
$.each(list, function (i, value) { 
_html += '<a _id="' + value.id + '">' + value.name + '</a>'; 
}); 
} 
_html += '</p>'; 
_html += '</div>'; 
var parent = _tag.parent(); 
_tag.replaceWith(_html); 
_tag = parent.find('.dropdown' + (css.length > 0 ? '.' + css.replace(' ', '.') : '')); 
} 
} 
//下拉事件 
this.showEvent = function () { 
_tag.find('span').unbind('click').click(function () { 
var p = $(this).parent().find('p'); 
if (p.css('display') == 'block') { 
p.css('display', 'none'); 
$(this).removeClass('active'); 
} else if (p.html().length > 0) { 
p.css('display', 'block'); 
$(this).addClass('active'); 
} 
}); 
} 
//选中事件 
this.selectedIndex = function (index) { 
_tag.find('p a').unbind('click').click(function () { 
var parent = $(this).parent().parent(); 
//给下拉框赋值 
if ($(this).text().length > 0) { 
var font = parent.find('font'); 
font.text($(this).text()); 
font.attr("_id", $(this).attr('_id')); 
_this.selectedIndexExpand(parent, $(this).index()); 
parent.find('span').removeClass('active'); 
} 
parent.find('p').css('display', 'none'); 
}); 
if (_tag.find('p a').length <= _index) _index = 0; 
if (_value && _value != '') { 
_index = _tag.find('p a[_id="' + _value + '"]').index(); 
} 
_tag.find('p a:eq(' + _index + ')').click(); 
} 
//选中事件扩展 
this.selectedIndexExpand = function (tag, index) { } 
}

2、示例代码:
//http://www.naoqiu.com 
var array_state = [{ id: -1, name: '状态' }, { id: 1, name: '未成功' }, { id: 2, name: '成功' }, { id: 3, name: '失败'}]; 
//状态下拉控件 
var select_type = new ComboBox(); 
select_type.tag = $('.select_type'); 
select_type.data_default = array_state[0]; 
select_type.data_list = array_state; 
select_type.selectedIndexExpand = function (tag, index) { 
//fun_Pager(); 
} 
select_type.init();

3、示例图:
基于jquery扩展漂亮的下拉框可以二次修改
Javascript 相关文章推荐
Chosen 基于jquery的选择框插件使用方法
May 30 Javascript
js用Date对象的setDate()函数对日期进行加减操作
Sep 18 Javascript
javascript高级编程之函数表达式 递归和闭包函数
Nov 29 Javascript
Spring mvc 接收json对象
Dec 10 Javascript
JavaScript实现显示函数调用堆栈的方法
Apr 21 Javascript
JavaScript实现图片懒加载(Lazyload)
Nov 28 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
Oct 06 Javascript
Vue中的字符串模板的使用
May 17 Javascript
对Vue beforeRouteEnter 的next执行时机详解
Aug 25 Javascript
JS中的防抖与节流及作用详解
Apr 01 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
Oct 23 Javascript
ES6的循环与可迭代对象示例详解
Jan 31 Javascript
showModelDialog弹出文件下载窗口的使用示例
Nov 19 #Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
Nov 19 #Javascript
jquery showModelDialog的使用方法示例详解
Nov 19 #Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
Nov 19 #Javascript
禁止ajax缓存获取程序最新数据的方法
Nov 19 #Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
Nov 19 #Javascript
jQuery控制iFrame(实例代码)
Nov 19 #Javascript
You might like
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
js调用css属性写法
2013/09/21 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
Vuex简单入门
2017/04/19 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
理解javascript async的用法
2017/08/22 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python迭代和迭代器详解
2016/11/10 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
2018/06/19 Python
opencv python 基于KNN的手写体识别的实例
2018/08/03 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
python实现ip地址的包含关系判断
2020/02/07 Python
python2和python3哪个使用率高
2020/06/23 Python
Python读写锁实现实现代码解析
2020/11/28 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
幼儿园安全检查制度
2014/01/30 职场文书
一份创业计划书范文
2014/02/08 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
学习十八大标语
2014/10/09 职场文书
市场营销计划书
2015/01/17 职场文书
大学生支教感言
2015/08/01 职场文书
食品安全主题班会
2015/08/13 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
python自动化八大定位元素讲解
2021/07/09 Python
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis