基于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 相关文章推荐
上传的js验证(图片/文件的扩展名)
Apr 25 Javascript
在浏览器中打开或关闭JavaScript的方法
Jun 03 Javascript
浅析Node.js中的内存泄漏问题
Jun 23 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
JQuery datepicker 用法详解
Dec 25 Javascript
Immutable 在 JavaScript 中的应用
May 02 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
Oct 14 Javascript
浅谈vuex之mutation和action的基本使用
Aug 29 Javascript
微信小程序数据存储与取值详解
Jan 30 Javascript
layui table 获取分页 limit的方法
Sep 20 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
Oct 26 Javascript
Angular短信模板校验代码
Sep 23 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相关资料
2006/10/09 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
php树型类实例
2014/12/05 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
js正则表达式简单校验方法
2021/01/03 Javascript
Python实现文件信息进行合并实例代码
2018/01/17 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
python科学计算之narray对象用法
2019/11/25 Python
pycharm的python_stubs问题
2020/04/08 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
Linux文件系统类型
2012/02/15 面试题
新闻专业推荐信范文
2013/11/20 职场文书
师说教学反思
2014/02/07 职场文书
承诺书范文
2014/06/03 职场文书
运动会稿件100字
2014/09/24 职场文书
80后婚前协议书范本
2014/10/24 职场文书
学生逃课检讨书
2015/02/17 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书