默认的select标签比较难看,UI比较漂亮,如果想要实现UI上的下拉样式,好像必须用js写select,从网上拷贝而且修改了一个下拉框,为了方便以后引用所以记录下来。

/* diy_select */
.diy_select{height:30px;width:90px; position: relative;font-size:14px;margin:0px;background:#fff;color:#000;float:left; cursor:pointer;}
.diy_select_btn,.diy_select_txt{float:left;height:100%;line-height:30px}
.diy_select,.diy_select_list{border:0px solid #d8d8d8;}
.diy_select_txt{width:90px;background: url(../images/select_ico.png) no-repeat 70px 50% #fff;color:#666; }
.diy_select_txt,.diy_select_list li{text-indent:8px;overflow:hidden}
.diy_select_btn{width:28px;background:url(rec.gif) no-repeat center}
.diy_select_list{position:absolute;top:30px;left:0px;z-index:;border-top:none;width:100%;display:none;_top:29px;background:#fff;color:#333; }
.diy_select_list li{list-style:none;height:24px;line-height:24px;cursor:default;_background:#fff}
.diy_select_list li.focus{background:#257824;color:#fff}

js

<script type="text/javascript">
function diy_select(){this.init.apply(this,arguments)};
diy_select.prototype={
init:function(opt)
{
this.setOpts(opt);
this.o=this.getByClass(this.opt.TTContainer,document,'div');//容器
this.b=this.getByClass(this.opt.TTDiy_select_btn);//按钮
this.t=this.getByClass(this.opt.TTDiy_select_txt);//显示
this.l=this.getByClass(this.opt.TTDiv_select_list);//列表容器
this.ipt=this.getByClass(this.opt.TTDiy_select_input);//列表容器
this.lengths=this.o.length;
this.showSelect();
},
addClass:function(o,s)//添加class
{
o.className = o.className ? o.className+' '+s:s;
},
removeClass:function(o,st)//删除class
{
var reg=new RegExp('\\b'+st+'\\b');
o.className=o.className ? o.className.replace(reg,''):'';
},
addEvent:function(o,t,fn)//注册事件
{
return o.addEventListener ? o.addEventListener(t,fn,false):o.attachEvent('on'+t,fn);
},
showSelect:function()//显示下拉框列表
{
var This=this;
var iNow=0;
this.addEvent(document,'click',function(){
for(var i=0;i<This.lengths;i++)
{
This.l[i].style.display='none';
}
})
for(var i=0;i<this.lengths;i++)
{
this.l[i].index=this.b[i].index=this.t[i].index=i;
this.t[i].onclick=this.b[i].onclick=function(ev)
{
var e=window.event || ev;
var index=this.index;
This.item=This.l[index].getElementsByTagName('li'); This.l[index].style.display= This.l[index].style.display=='block' ? 'none' :'block';
for(var j=0;j<This.lengths;j++)
{
if(j!=index)
{
This.l[j].style.display='none';
}
}
This.addClick(This.item);
e.stopPropagation ? e.stopPropagation() : (e.cancelBubble=true); //阻止冒泡
}
}
},
addClick:function(o)//点击回调函数
{ if(o.length>0)
{
var This=this;
for(var i=0;i<o.length;i++)
{
o[i].onmouseover=function()
{
This.addClass(this,This.opt.TTFcous);
}
o[i].onmouseout=function()
{
This.removeClass(this,This.opt.TTFcous);
}
o[i].onclick=function()
{
var index=this.parentNode.index;//获得列表
This.t[index].innerHTML=This.ipt[index].value=this.innerHTML.replace(/^\s+/,'').replace(/\s+&/,'');
This.l[index].style.display='none';
}
}
}
},
getByClass:function(s,p,t)//使用class获取元素
{
var reg=new RegExp('\\b'+s+'\\b');
var aResult=[];
var aElement=(p||document).getElementsByTagName(t || '*'); for(var i=0;i<aElement.length;i++)
{
if(reg.test(aElement[i].className))
{
aResult.push(aElement[i])
}
}
return aResult;
}, setOpts:function(opt) //以下参数可以不设置 //设置参数
{
this.opt={
TTContainer:'diy_select',//控件的class
TTDiy_select_input:'diy_select_input',//用于提交表单的class
TTDiy_select_txt:'diy_select_txt',//diy_select用于显示当前选中内容的容器class
TTDiy_select_btn:'diy_select_btn',//diy_select的打开按钮
TTDiv_select_list:'diy_select_list',//要显示的下拉框内容列表class
TTFcous:'focus'//得到焦点时的class
}
for(var a in opt) //赋值 ,请保持正确,没有准确判断的
{
this.opt[a]=opt[a] ? opt[a]:this.opt[a];
}
}
} var TTDiy_select=new diy_select({ //参数可选
TTContainer:'diy_select',//控件的class
TTDiy_select_input:'diy_select_input',//用于提交表单的class
TTDiy_select_txt:'diy_select_txt',//diy_select用于显示当前选中内容的容器class
TTDiy_select_btn:'diy_select_btn',//diy_select的打开按钮
TTDiv_select_list:'diy_select_list',//要显示的下拉框内容列表class
TTFcous:'focus'//得到焦点时的class
});//如同时使用多个时请保持各class一致.
</script>

html

<div class='diy_select'>
<input type='hidden' name='' class='diy_select_input'/>
<div class='diy_select_txt'>直播课堂</div>
<div class='diy_select_btn'></div>
<ul class='diy_select_list'>
<li>课程</li>
<li>直播课堂</li>
<li>学校</li>
<li>老师</li>
</ul>
</div>

效果图

(二)js下拉菜单的更多相关文章

  1. CSS+JS下拉菜单和纯CSS下拉菜单

    下拉菜单 (思路:先把二级定位到屏幕外,鼠标悬停重新定位回来:另一个就是ul浮动,li也浮动) 下拉菜单的一般思路就是把子导航嵌套在无序列表中,把列表定位到屏幕之外,当鼠标悬停在其父列表项上时,重新定 ...

  2. JS 下拉菜单

    HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  3. css中overflow:hidden的属性 可能会导致js下拉菜单无法显示

    css中overflow:hidden属性导致ExtJS中无法显示下拉滚动条 overflow属性: visible 默认.内容不会被修剪,会呈现在元素之外. hidden 内容会被修剪,但是浏览器不 ...

  4. js下拉菜单默认值为当前年份,下拉菜单的选项为当前年份往前推5年

    1:在jsp或者HTML页面中新建一个下拉框 年度:<select id="cx_nd" name="cx_nd" style="width: ...

  5. Java Swing实战(二)下拉菜单组件JComboBox及其事件监听

    接下来给"数据源配置"面板添加下拉框. /** * @author: lishuai * @date: 2018/11/26 13:51 */ public class Weimi ...

  6. JS 下拉菜单案例

    css代码 .nav { width: 300px; height: 400px; list-style: none; padding:; margin: 0 auto; } .nav>li { ...

  7. 原生js下拉菜单

    var oDiv = document.getElementById("sunav"); var oLi = oDiv.getElementsByClassName("s ...

  8. -第2章 JS方法实现下拉菜单显示和隐藏

    知识点 onmouseover 鼠标经过 onmouseout 鼠标移出 function 关键字 getElementsByTagName 获取一组标签 length 获取对象成员个数 思路 给一级 ...

  9. bootstrap的下拉菜单组件与导航条

    前期准备:bootstrap的css文件和js文件先引入 Bootstrap 组件-拉下菜单(class+js) 下拉菜单必需三级结构 <div class="dropdown&quo ...

随机推荐

  1. linux中权限的修改

    修改访问权限的linux名是:Linux访问权限的问题是这样子的:比如 d rwx rwx rwx ,d是文件所在的文件,后面有9位,分别代表不同者的权限.第一个rwx代表这文件的所有者的权限,r是r ...

  2. 开发板ping不通主机和虚拟机的看过来(转载)!

    前几天在做uboot下用tftp下载文件到开发板的实验时,为了能解决开发板ping不通主机和虚拟机的问题,可谓绞尽脑汁,正所谓久病成医,虽然为了这一小问题废了我那么长时间,但我在解决问题的同时也学到了 ...

  3. centos'的yum安装php的memcache扩展

    centos'的yum安装php的memcache扩展 博客分类: linux   让php能使用memcached服务的扩展有两种:memcache 和 memcached 1. 先安装libmem ...

  4. JavaWeb学习笔记——开发动态WEB资源(六)ServletConfig和ServletContext

    1.只有在第一次请求服务器产生实例的时候才会调用init()方法,有一种办法能在服务器一启动的时候就加载init()方法. 即服务器启动即加载Servlet,且按数字大小顺序实例化Servlet. 方 ...

  5. linux curl 命令详解,以及实例

    linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具. 一,curl命令参数,有好多我没有用过,也不知道翻 ...

  6. 最好用的placeholder插件,jQuery插件EnPlaceholder

    EnPlaceholder插件支持密码框哦!实际对比同类的placeholder插件在ie等浏览器下效果做好! 插件效果预览:http://www.wufangbo.com/demo/jquery/3 ...

  7. 学海无涯的整理Ing..........

    1.文章:Understanding JavaScript Function Invocation and “this” http://yehudakatz.com/2011/08/11/unders ...

  8. jsp简单标签开发(一)

    孤傲苍狼 @Override22 public void doTag() throws JspException, IOException {23 //得到代表jsp标签体的JspFragment24 ...

  9. Redis-cluster集群【第三篇】:redis主从

    Redis主从复制原理: 通过把这个RDB文件或AOF文件传给slave服务器,slave服务器重新加载RDB文件,来实现复制的功能! 复制的话:主服务器可以有多个从服务器!!!  不仅这样从服务器还 ...

  10. APACHE POI教程 --java应用程序用POI与Excel交互

    POI报表 --用POI与Excel交互 AURISOFT 第一章 POI简介 --Jakata Poi HSSF:纯java的Excel解决方案 在我们实际的开发中,表现层的解决方案虽然有多样,但是 ...