基于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第一课
Feb 27 Javascript
jQuery 插件 将this下的div轮番显示
Apr 09 Javascript
JS 面向对象的5钟写法
Jul 31 Javascript
MyEclipse取消验证Js的两种方法
Nov 14 Javascript
解析页面加载与js函数的执行 onload or ready
Dec 12 Javascript
JavaScript基础知识学习笔记
Dec 02 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
Sep 09 Javascript
使用vue如何构建一个自动建站项目
Feb 05 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
Aug 19 Javascript
浅谈javascript错误处理
Aug 11 Javascript
详解element-ui中表单验证的三种方式
Sep 18 Javascript
vue学习笔记之Vue中css动画原理简单示例
Feb 29 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 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
js图片预加载示例
2014/04/30 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
Numpy掩码式数组详解
2018/04/17 Python
python实现画一颗树和一片森林
2018/06/25 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
python add_argument()用法解析
2020/01/29 Python
sklearn+python:线性回归案例
2020/02/24 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
Python configparser模块常用方法解析
2020/05/22 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
公司拓展活动方案
2014/02/13 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
python缺失值填充方法示例代码
2022/12/24 Python