默认的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. UVA 11419SAM I AM(输出 最小覆盖点 )

    参考博客:如何找取 最小覆盖点集合 题意:R*C大小的网格,网格上面放了一些目标.可以再网格外发射子弹,子弹会沿着垂直或者水平方向飞行,并且打掉飞行路径上的所有目标,计算最小多少子弹,各从哪些位置发射 ...

  2. 模拟退火解决TSP问题

    // monituihuo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #includ ...

  3. 蛋疼的vs

    这个vs2008 难用的很,要是叫我选肯定vs高版本的,vs2012或者直接vs2015

  4. ef to sqlite 实际开发问题终极解决方法

    版本问题 vs安装问题 x64/x86 发布问题 针对开发中遇到的问题,通过一下方法解决: 1.sqlite下载地址http://system.data.sqlite.org/index.html/d ...

  5. CentOS配置163的yum源

    entOS系统自带的更新源的速度在国内非常慢,在国内为了让CentOS6使用速度较快快的YUM更新源,建议选择163(网易)的更新源. 1.下载repo文件wget http://mirrors.16 ...

  6. re正则表达式6_+

    + means"match one or more" the group proceding a plus must appear at least once. # -*- cod ...

  7. Ruby on rails学习笔记——安装环境

    出现问题: C:\Users\len>gem install rails ERROR: While executing gem ... (Gem::RemoteFetcher::FetchErr ...

  8. Struct Member Default Value

    在C#中struct是值类型的数据类型,其默认值相当于调用了无参数默认构造函数之后的值.这也许就是struct不允许重载无参数默认构造函数的原因. https://msdn.microsoft.com ...

  9. js与php转换时间戳

    php时间:1368524732 js代码: function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleStri ...

  10. swoole 教程

    环境安装:http://blog.csdn.net/ldy3243942/article/details/40263735 Task使用以及swoole_client:http://blog.csdn ...