基于jquery的网页SELECT下拉框美化代码


Posted in Javascript onOctober 28, 2010

1.解决了有些select 美化代码,无法触发原有select 控件的onchange 事件问题。
2.允许多次调用 $("...").selectCss(),以解决Select的options更新后无法同步的问题。

使用方法如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>无标题文档</title> 
<link href="selectCss.css" rel="stylesheet" type="text/css" /> 
<script src="jquery-1.3.2.min.js" type="text/javascript"></script> 
<script src="selectCss.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
$("select").selectCss(); 
}); 
</script> 
</head> 
<body> 
<select name="" onchange="alert(this.value)" id="select1"> 
<option value="1" title="选项选项选项选项" >选项1</option> 
<option value="2">选项2</option> 
<option value="3">选项3</option> 
</select> 
<select name="" id="select2"> 
<option value="1">选项31</option> 
<option value="2">选项32</option> 
<option value="3">选33</option> 
</select> 
</body> 
</html>

主要文件包括 selectCss.css 和 selectCss.js
selectCss.js 文件代码:
(function($){ 
function hideOptions(speed){ 
if(speed.data){speed=speed.data} 
if($(document).data("nowselectoptions")) 
{ 
$($(document).data("nowselectoptions")).slideUp(speed); 
$($(document).data("nowselectoptions")).prev("div").removeClass("tag_select_open"); 
$(document).data("nowselectoptions",null); 
$(document).unbind("click",hideOptions); 
$(document).unbind("keyup",hideOptionsOnEscKey); 
} 
} 
function hideOptionsOnEscKey(e){ 
var myEvent = e || window.event; 
var keyCode = myEvent.keyCode; 
if(keyCode==27)hideOptions(e.data); 
} 
function showOptions(speed){ 
$(document).bind("click",speed,hideOptions); 
$(document).bind("keyup",speed,hideOptionsOnEscKey); 
$($(document).data("nowselectoptions")).slideDown(speed); 
$($(document).data("nowselectoptions")).prev("div").addClass("tag_select_open"); 
} $.fn.selectCss=function(_speed){ 
$(this).each(function(){ 
var speed=_speed||"fast"; 
if($(this).data("cssobj")){ 
$($(this).data("cssobj")).remove(); 
} 
$(this).hide(); 
var divselect = $("<div></div>").insertAfter(this).addClass("tag_select"); 
$(this).data("cssobj",divselect); 
var divoptions = $("<ul></ul>").insertAfter(divselect).addClass("tag_options").hide(); 
divselect.click(function(e){ 
if($($(document).data("nowselectoptions")).get(0) != $(this).next("ul").get(0)){ 
hideOptions(speed); 
} 
if(!$(this).next("ul").is(":visible")) 
{ 
e.stopPropagation(); 
$(document).data("nowselectoptions",$(this).next("ul")); 
showOptions(speed); 
} 
}); 
divselect.hover(function(){ 
$(this).addClass("tag_select_hover"); 
} 
, 
function(){ 
$(this).removeClass("tag_select_hover"); 
}); 
$(this).change(function(){ 
$(this).nextAll("ul").children("li:eq("+ $(this)[0].selectedIndex +")").addClass("open_selected").siblings().removeClass("open_selected"); 
$(this).next("div").html($(this).children("option:eq("+ $(this)[0].selectedIndex +")").text()); 
}); 
$(this).children("option").each(function(i){ 
var lioption= $("<li></li>").html($(this).text()).attr("title",$(this).attr("title")).appendTo(divoptions); 
if($(this).attr("selected")){ 
lioption.addClass("open_selected"); 
divselect.html($(this).text()); 
} 
lioption.data("option",this); 
lioption.click(function(){ 
lioption.data("option").selected=true; 
$(lioption.data("option")).trigger("change",true) 
}); 
lioption.hover( 
function(){$(this).addClass("open_hover");}, 
function(){ $(this).removeClass("open_hover"); } 
); 
}); 
}); 
} 
})(jQuery);

selectCss.Css 文件代码:
.tag_select{display:block;color:#000;width:179px;height:23px;background:transparent url("images/index_22.jpg") no-repeat 0 0;padding:0 10px;line-height:23px; color:#7D7D7D; font-size:12px; cursor:pointer} 
.tag_select_hover{ color:#ff0000; background:transparent url("selectbg.jpg") no-repeat 0 0; } 
.tag_select_open{ color:#0000ff; background:transparent url("selectbg.jpg") no-repeat 0 0;} 
ul.tag_options{position:absolute;margin:0;list-style:none;background:#fff;padding:0 0 1px;margin:0;width:162px ; height:100px; overflow:hidden; overflow-y:auto; font-size:12px; margin-left:10px; cursor:pointer; z-index:1000 } 
ul.tag_options li{background:#fff; display:block;width:140px;padding:0 10px;height:20px;text-decoration:none;line-height:20px;color:#000; font-weight:normal; font-size:12px} 
ul.tag_options li.open_hover{background:#0000ff;color:#000; font-weight:normal; font-size:12px} 
ul.tag_options li.open_selected{background:#ccc; font-size:12px;font-weight:bold; }

selectbg.jpg 图片:
基于jquery的网页SELECT下拉框美化代码
Javascript 相关文章推荐
js活用事件触发对象动作
Aug 10 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
Aug 24 Javascript
一个js的tab切换效果代码[代码分离]
Apr 11 Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
Apr 28 Javascript
JavaScript中的eval()函数详解
Aug 22 Javascript
在javascript中执行任意html代码的方法示例解读
Dec 25 Javascript
JavaScript的strict模式与with关键字介绍
Feb 08 Javascript
javascript中String对象的slice()方法分析
Dec 20 Javascript
js实现新年倒计时效果
Dec 10 Javascript
js oncontextmenu事件使用详解
Mar 25 Javascript
Angularjs中使用轮播图指令swiper
May 30 Javascript
生产制造追溯系统之在线打印功能
Jun 03 Javascript
jQuery编写widget的一些技巧分享
Oct 28 #Javascript
jQuery timers计时器简单应用说明
Oct 28 #Javascript
jquery ajax abort()的使用方法
Oct 28 #Javascript
BOM与DOM的区别分析
Oct 26 #Javascript
js下判断 iframe 是否加载完成的完美方法
Oct 26 #Javascript
Javascript下判断是否为闰年的Datetime包
Oct 26 #Javascript
基于jquery的给文章加入关键字链接
Oct 26 #Javascript
You might like
PHP实现找出链表中环的入口节点
2018/01/16 PHP
php写app用的框架整理
2019/09/29 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
JS中静态页面实现微信分享功能
2017/02/06 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
面包屑导航详解
2017/12/07 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
Python程序暂停的正常处理方法
2019/11/07 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
校园主题婚礼活动策划方案
2014/09/15 职场文书
债务授权委托书范本
2014/10/17 职场文书
企业宣传稿范文
2015/07/23 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技