默认的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. tomcat密码的坑

    <role rolename="tomcat"/> <role rolename="role1"/> <user username ...

  2. SQL Server 2012 启动

    1.  启动 SQL Server Management studio 2. 选择登录模式 Server name:   "." 代表本地的数据库 Authertication: ...

  3. 条件运算符(?:)和 $""替代string.Format()

    1. 条件运算符(?:)根据Boolean表达式的值返回两个值之一.表达式如下: condition ? first_expression : second_expression 2. $" ...

  4. elasticsearch scroll api--jestclient invoke

    @Test public void testScroll(){ JestClientFactory factory = new JestClientFactory(); factory.setHttp ...

  5. easyUI数据表格datagrid之笔记

    1.用ajax获取数据库数据 /**========================================= * 读取数据库信息,使用ajax的load方法 */function getMe ...

  6. codeforces 712C C. Memory and De-Evolution(贪心)

    题目链接:http://codeforces.com/problemset/problem/712/C 题目大意: 给连个值x,y (3 ≤ y < x ≤ 100 000), x,y都为等边三 ...

  7. python线程锁

    import time,threading balance = 0 lock = threading.Lock() def change_it(n): global balance balance = ...

  8. yourtour的几种链接

    php,html {:URL('User-Register/index')}    格式:http://www.xxx.com/index.php?g=User&m=User&a=in ...

  9. YOURPHP的分页完整版

    html代码 <?php print_r($ser['searchtype']);?> <select name="searchtype"> <opt ...

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

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