通用的下拉菜单__用DL\\DD\\DT解决无法遮住select的问题
作者:zishu 来源:zishu blog 发布时间:2008-07-28 13:28:00
标签:菜单,下拉,select,css
前几天写了一个ajax的,总感觉代码比较多,今天晚上又得写了一下,感觉代码还是比较多,但还好的是,比较通用。谁有办法优化一下当然好。
写的过程,还是从后向前写,先写HTML部分,希望是一个什么样子的。 想来想去,其它用dl\dt\dd来作,再好不过了;
IE6,IE7,firefox我都测过没有问题!
程序代码
<dl>
<dt></dt>
<dd></dd>
</dl>
以下是全部的代码:
程序代码
<dl>
<dt onclick="AjaxSelectBox(this)">------------请选择------------ </dt>
<dd style="display:none">//这里如果作成AJAX的,可以为空;
<ul>
<li value="1">this is 001.</li>
<li value="2">this is 002.</li>
<li value="3">this is 003.</li>
</ul>
<input type="hidden" value="" /> //存放选中后的value
</dd>
</dl>
AjaxSelectBox()用来重新set一下li中的行为。
程序代码
function AjaxSelectBox(v){
var dl = v.parentNode;
var dd = dl.getElementsByTagName("dd")[0];
var dt = dl.getElementsByTagName("dt")[0];
var lis = dl.getElementsByTagName("li");
var html = '';
for(var y=0; y<lis.length; y++){
html += '<li onclick="SetSelectInput(this,1);" onmouseout="SetSelectInput(this,2);" onmousemove="SetSelectInput(this,3);" value="'+lis[y].value+'">' + lis[y].innerHTML + '</li>';
}
dl.getElementsByTagName("ul")[0].innerHTML = html;
dd.style.display = "block";
dl.onmouseout = function() {dd.style.display = "none";}
dd.onmouseover = function() {dd.style.display = "block";}
}
SetSelectInput();是点击后的行为;
程序代码
function SetSelectInput(v,flag){
var dl = v.parentNode;
while(dl.nodeName != 'DL'){
dl = dl.parentNode;
}
var input = dl.getElementsByTagName("input")[0];
var dd = dl.getElementsByTagName("dd")[0];
var dt = dl.getElementsByTagName("dt")[0];
dd.onmouseover = function() {dd.style.display = "block";}
v.onmouseover = function() {dd.style.display = "block";}
dd.onmouseout = function() {dd.style.display = "none"}
if(flag == 1){
input.value = v.attributes.getNamedItem("value").value;
dt.innerHTML = v.innerHTML;
dd.style.display = "none";
} else if(flag == 2){
v.className = 'out'; return;
} else{
v.className = 'move'; return;
}
}
CSS部分写的比较广,只要在FORM中都生效;
程序代码
<style>
*{ margin:0; padding:0}
body{ font-family:Verdana; font-size:12px; line-height:1.8; padding:50px;}
form dt{ background:url(/file/UploadPic/20087/28/2008728133512977.gif) no-repeat left center;
width:193px;cursor:default; padding-left:5px;}form .out{ background:#FFFFFF; color:#000000;}
form .move{ background:#000066; color:#FFFFFF}
form dl{text-align:left;}
form dd{ border:1px solid #000;position:absolute; width:195px; overflow:hidden;background:#fff; margin-top:-3px;}
form dd li{cursor:default; width:100%; padding-left:5px;}
</style>
效果如下:
多放几个也没有问题:
这样可以解决,无法把select给遮住的问题,而且可以作更多的效果出来。而且javascript不用改,CSS部分也不用改。HTML只要按DL、DT、DD的格式去写就可以了。


猜你喜欢
- 直接上代码:<?php$array_values['host'] = "host";$array_
- 使用fso对象遍历指定文件夹函数:'遍历文件夹sub ListFolderContents(path) &nbs
- python中reduce和map简介map(func,seq1[,seq2...]) :将函数func作用于给定序列的每个元素,并用一个列
- 最近,W3C的一项公告称,在W3C与XHTML2的合同于今年年底到期后将不会续签。这意味着W3C停止了对XHTML2的开发,转而大力支持HT
- 本文介绍基于Python语言,按照一定命名规则批量修改多个文件的文件名的方法。已知现有一个文件夹,其中包括班级所有同学上交的作业文件,每人一
- 随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascript
- 【导语】:对自己写的冗长代码,想重构但又无思路?小编整理了系列介绍python代码重构优化的方法,助你一臂之力。编写干净的 Pythonic
- js代码:window.alert = function(msg, callback) {var div = document.create
- 利用oracle的dbms_random包结合rownum来实现,示例如下,随机取499户:select * from ( select *
- 利用可视化探索图表1.数据可视化与探索图数据可视化是指用图形或表格的方式来呈现数据。图表能够清楚地呈现数据性质, 以及数据间或属性间的关系,
- 首先,我们用webpy写一个简单的网站,监听8080端口,返回“Hello, EverET.org”的页面。然后我们使用我们的forward
- 本文实例为大家分享了python策略模式代码,供大家参考,具体内容如下"""策略模式""&
- 前言前段时间在微博看到一段摸鱼人的倒计时模板,感觉还挺有趣的。于是我用了一小时的时间写了个页面出来 摸鱼办地址 (当然是摸鱼的时间啦)。模板
- 基本原理讲解:高斯模糊的算法高斯核函数的编写:构建权重矩阵,采用高斯二维分布函数的形式进行处理。需要注意的是,这里我没有特判当sigma =
- 本文实例为大家分享了js通过开始结束控制计时器的具体实现代码,供大家参考,具体内容如下时间戳的使用的可以取消对多次点击事件产生效果的累加,譬
- 问题描述在深度学习相关任务的训练时,需要在训练的每个 epoch 记录当前 epoch 的准确率(如下图所示),那么在 python 中要怎
- python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。得到当前工作目录,即当前Python脚本工作的目录路
- 编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出绝对路径。import osclass Sear
- 字符串’^198[0-9]$’可以匹配‘1980-1989’
- 1 前言前面的文章中我们已经获取到了基金的阶段变动信息和ETF信息的获取,那么在本章中,我们将继续前面的内容,获取基金的价格信息,并且把之前