JavaScript模拟下拉菜单

 <!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>
<style type="text/css">
body{margin:20px auto;font-family:Arial, Helvetica, sans-serif;font-size:12px;width:950px;height:400px;border:solid 1px #aaa; position:relative;padding:10px;}
ul{margin:0;padding:0;list-style:none;}
.dropDownList{position:absolute;left:100px;top:100px;}
/* .dropDownList div.dropdown select{display:none;}*/
.dropDownList div.dropdown{float:left;margin-right:120px;width:146px;}
.dropDownList span{display:block;width:146px;height:26px;background:url( http://3.bp.blogspot.com/_bdBPvgEipxw/SRMUkLCdX0I/AAAAAAAAAP8/HgDXLapwpAw/s320/select.gif) left top no-repeat;line-height:26px;text-indent:12px;border:solid 1px #83BBD9;cursor:default;}
.dropDownList span.over{background-position:left bottom;border-color:#B4C91A;}
 .dropDownList ul{background:#eee;width:200px;display:none;}
  .dropDownList ul li{height:20px;width:100%;padding:3px 0;text-indent:12px;cursor:default;}
  .dropDownList ul li.over{background:#ccc;}
 .dropDownList ul.show{display:block;}
</style>
</head>
<body>
<h1>JavaScript模拟下拉菜单,做的仓促,虚心接受批评。</h1>
<form action="#" method="get">
<div class="dropDownList">
 <div id="dropDownList1" class="dropdown">
  <select name="birthday">
   <option>请选择</option>
   <option>1988</option>
   <option>1989</option>
  </select>
  <span>请选择年份</span>
  <ul></ul>
 </div>
 <div id="dropDownList2" class="dropdown">
  <select name="sex">
   <option>性别</option>
   <option>男</option>
   <option>女</option>
  </select>
  <span>请选择性别</span>
  <ul></ul>
 </div>
 <div id="dropDownList3" class="dropdown">
  <select name="student">
   <option>幼儿班</option>
   <option>小学</option>
   <option>初中</option>
  </select>
  <span>请选择学历</span>
  <ul></ul>
 </div>
</div>
</form>
</body>
</html>
<script type="text/javascript">
// JavaScript Document
var ____configArray;
function __initDropDownList(configArray){
 //获取Select菜单
 ____configArray=configArray;
 var existArray=configArray.split("|");
 for(var i=0;i<existArray.length;i++){
  if(existArray[i].length<1){return;}
  //根据参数分别获取div,并分别添加事件
  var parentContainer=document.getElementById(existArray[i]);
  if(!parentContainer){return;}
  //获取下面的select,且获取其中的option
  var selectObj=parentContainer.getElementsByTagName("select");
  if(selectObj.length<1){return;}
  var optionArray=selectObj[0].getElementsByTagName("option");
  //获取option,并分别添加到各个li
  var optionLength=optionArray.length;
  for(var j=0;j<optionLength;j++){
   //获取ul,以便能够添加项目
   var ulObj=parentContainer.getElementsByTagName("ul");
   if(ulObj.length<1){return;}
   //获取span,以便能显示当前选择的项目
   var spanObj=parentContainer.getElementsByTagName("span");
   if(spanObj.length<1){return;}
   var liObj=document.createElement("li");
   var textNode=document.createTextNode(optionArray[j].firstChild.nodeValue)
   liObj.appendChild(textNode);
   liObj.setAttribute("currentIndex",j);
   //给每个liObj添加事件
   liObj.οnclick=function(){
    selectCurrentItem(this.parentNode,this);
   }
   liObj.οnmοuseοver=function(){this.className="over";}
   liObj.οnmοuseοut=function(){this.className="";}
   ulObj[0].appendChild(liObj);
   spanObj[0].οnclick=function(event){
    //如果当前是显示的,就隐藏,反之亦然
    showHiddenUl(this);
   }
   spanObj[0].οnmοuseοver=function(){this.className='over';}
   spanObj[0].οnmοuseοut=function(){this.className="";};
   ulObj[0].οnclick=function(){this.className="";}
  }
  parentContainer.οnclick=function(event){
   if(!event){event=window.event;}
    //阻止事件冒泡
    event.cancelBubble=true;
    var eventUlObj=this.getElementsByTagName("ul")[0];
    bodyClickHiddenUl(eventUlObj);
  }
 }
}
function selectCurrentItem(ulObj,currentObj){
 var parentObj=ulObj.parentNode;
 var spanObj=parentObj.getElementsByTagName("span")[0];
 spanObj.firstChild.nodeValue=currentObj.firstChild.nodeValue;
 var selectObj=parentObj.getElementsByTagName("select")[0];
 selectObj.selectedIndex=parseInt(currentObj.getAttribute("currentIndex"));
}
function showHiddenUl(currentObj){
 var parentNode=currentObj.parentNode;
 var ulObj=parentNode.getElementsByTagName("ul")[0];
 if(ulObj.className==""){
  ulObj.className="show";
 }else{
  ulObj.className="";
 }
}
//点击body区域(非“下拉菜单”)隐藏菜单
function addBodyClick(func) {
 var bodyObj=document.getElementsByTagName("body")[0];
 var oldBodyClick = bodyObj.onclick;
  if (typeof bodyObj.onclick != 'function') {
   bodyObj.onclick = func;
  } else {
   bodyObj.onclick = function() {
   oldBodyClick();
   func();
  }
 }
}
//隐藏所有的UL
function bodyClickHiddenUl(eventUlObj){
 var existArray=____configArray.split("|");
 for(var i=0;i<existArray.length;i++){
  if(existArray[i].length<1){return;}
  //寻找所有UL并且隐藏
  var parentContainer=document.getElementById(existArray[i]);
  if(!parentContainer){return;}
  var ulObj=parentContainer.getElementsByTagName("ul");
  if(eventUlObj!=ulObj[0]){
   ulObj[0].className="";
  }
 }
}
var __dropDownList="dropDownList1|dropDownList2|dropDownList3";
__initDropDownList(__dropDownList);
//添加这个可以确保点击body区域的时候 也可以隐藏菜单
addBodyClick(bodyClickHiddenUl);
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值