基于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 相关文章推荐
javascript面向对象的方式实现的弹出层效果代码
Jan 28 Javascript
jquery的Theme和Theme Switcher使用小结
Sep 08 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
Sep 14 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
Sep 04 Javascript
仿百度换肤功能的简单实例代码
Jul 11 Javascript
Angular下H5上传图片的方法(可多张上传)
Jan 09 Javascript
jquery仿京东侧边栏导航效果
Mar 02 Javascript
node.js中EJS 模板快速入门教程
May 08 Javascript
jQuery基于cookie实现换肤功能实例
Oct 14 jQuery
小程序云开发实战小结
Oct 25 Javascript
vue+Element-ui实现分页效果实例代码详解
Dec 10 Javascript
用vue写一个日历
Nov 02 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
php下使用以下代码连接并测试
2008/04/09 PHP
一个php导出oracle库的php代码
2009/04/20 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
Python tkinter事件高级用法实例
2018/01/31 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
意大利团购网站:Groupon意大利
2016/10/11 全球购物
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
房屋出租协议书
2014/04/10 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
会计毕业生自荐书
2014/06/12 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
道歉短信大全
2015/05/12 职场文书
只用20行Python代码实现屏幕录制功能
2021/06/02 Python