写了个DIV模拟SELECT,望各位老师指点。。。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>SELECT菜单</title>
<style type="text/css">
* {
font-size:12px;
color:#999999;
}
div.Select_Menu {
width:0px;
height:16px;
float:none;
clear:both;
border:#CCCCCC 1px solid;
cursor:pointer;
}
div.Select_Left, div.Select_Right {
float:left;
clear:right;
}
div.Select_Left {
width:110px;
padding-top:1px;
padding-left:2px;
padding-right:2px;
}
div.Select_Right {
width:17px;
}
div.Select_Option {
visibility:hidden;
position:absolute;
border-left:#CCCCCC 1px solid;
border-right:#CCCCCC 1px solid;
border-bottom:#CCCCCC 1px solid;
cursor:pointer;
}
div.Select_Options {
background-color:#FFFFFF;
padding-top:2px;
padding-left:2px;
padding-right:2px;
}
</style>
<script type="text/javascript">
function $(id) {
return document.getElementById(id);
}
function selectMenu() {
/*
DIV模拟SELECT菜单 滚动条暂无处理
add方法添加div
然后修改div方法:
add方法:
添加option
add(value, innerHTML[, selected])
del方法
删除option
del(num)
upselected方法
修改当前selected为
upselected(num)
options.length方法
查看option个数
for in 可查看option元素集合,但是option是Object不是Array
*/
var onmouseDownObject;
var optionFontColor = ["#004080", "#999999"];
var optionBackGroundColor = ["#EEEEEE", "#FFFFFF"];
var widthCZ = (/MSIE/.test(window.navigator.userAgent) ? 0 : 4);
function createSelect(o, name) {
var hidden = document.createElement("input");
var left = document.createElement("div");
var right = document.createElement("div");
var img = document.createElement("img");
if (/MSIE/.test(window.navigator.userAgent)) {
o.setAttribute("className", "Select_Menu");
left.setAttribute("className", "Select_Left");
right.setAttribute("className", "Select_Right");
} else {
o.setAttribute("class", "Select_Menu");
left.setAttribute("class", "Select_Left");
right.setAttribute("class", "Select_Right");
}
img.setAttribute("src", "select_Img.gif");
left.setAttribute("align", "center");
right.setAttribute("align", "right");
right.appendChild(img);
hidden.setAttribute("type", "hidden");
hidden.setAttribute("name", name);
o.appendChild(left);
o.appendChild(right);
o.appendChild(hidden);
o.objectInput = hidden;
if (o.childNodes.length == 4) o.removeChild(o.childNodes[0]);
}
function createOption(o) {
//创建OPITON框
var d = document.createElement("div");
d.setAttribute("class", "Select_Option");
d.setAttribute("className", "Select_Option");
with (d.style) {
left = document.body.scrollLeft + o.offsetLeft + "px";
top = document.body.scrollTop + o.offsetTop + o.offsetHeight + "px";
width = (/MSIE/.test(window.navigator.userAgent) ? o.offsetWidth : o.clientWidth) + "px";
}
d.parent = o;
return document.body.appendChild(d);
}
function createOptions(width) {
//创建OPITON元素框
var d = document.createElement("div");
d.setAttribute("class", "Select_Options");
d.setAttribute("className", "Select_Options");
d.style.color = optionFontColor[1];
d.style.width = width - widthCZ;
d.onmouseover = over;
d.onmouseout = out;
d.onmousedown = down;
return d;
}
function hiddenSelect(o) {
//隐藏菜单
o.style.visibility = "hidden";
setStyle(o.parent.options[o.parent.selectedIndex], 0);
document.onmousedown = null;
}
function setSelectIndex(o, os) {
//设置selectIndex值
if (o.selectedIndex != null) {
setStyle(o.options[o.selectedIndex], 1);
}
o.selectedIndex = os.num;
setStyle(os, 0);
o.childNodes[0].innerHTML = o.options[os.num].innerHTML;
o.objectInput.value = o.options[os.num].value;
}
function getObject(o, n) {
//根据值返回OPTION
var i = 0;
for (var item in o) {
if (item == "maxNum" || item == "length") continue;
if (i == n) return o[item];
i ++;
}
}
function setStyle(o, n) {
//修改背景色和字颜色
if ("undefined" != typeof o) {
with (o.style) {
color = optionFontColor[n];
backgroundColor = optionBackGroundColor[n];
}
}
}
var add = function (value, text, selected) {
//执行创建option元素
var o = createOptions(this.option.clientWidth);
o.innerHTML = text;
o.value = value;
if (this.deloptions.length == 0) {
o.num = this.options.maxNum ++;
} else {
o.num = this.deloptions.pop();
}
this.options[o.num] = o;
if (selected == true || this.options.length == 0)
setSelectIndex(this, o);
this.option.appendChild(o);
this.options.length ++;
};
var del = function (n) {
//删除OPTION
var o = getObject(this.options, n);
if ("undefined" == typeof o) return;
this.deloptions.push(o.num);
delete this.options[o.num];
this.option.removeChild(o);
this.options.length --;
};
var upselected = function (n) {
//修改SELECTED
var o = getObject(this.options, n);
if ("undefined" == typeof o) return;
setSelectIndex(this, o);
};
var over = function () {
//鼠标经过OPTION时
var root = this.parentNode.parent;
setStyle(root.options[root.selectedIndex], 1);
setStyle(this, 0);
};
var out = function () {
//鼠标移开OPTION时
var root = this.parentNode.parent;
if (root.options[root.selectedIndex] != this) {
setStyle(this, 1);
}
};
var down = function () {
//当鼠标按下的时候付值并且隐藏菜单
setSelectIndex(this.parentNode.parent, this);
hiddenSelect(this.parentNode);
};
var oDown = function () {
//当鼠标单击Select的时候,隐藏/显示菜单。
var o = this;
if (o.option.style.visibility != "visible") {
o.option.style.visibility = "visible";
onmouseDownObject = o;
document.onmousedown = dDown;
} else {
hiddenSelect(o.option);
}
};
var dDown = function (e) {
//当鼠标单击别处的时候,隐藏菜单。
var o = onmouseDownObject, os = o.option;
var e = window.event || e;
var x = e.clientX + document.body.scrollLeft, y = e.clientY + document.body.scrollTop;
if (x < os.offsetLeft || x > (os.offsetLeft + os.offsetWidth) ||
y < (os.offsetTop - o.offsetHeight) || y > (os.offsetTop + os.offsetHeight)) {
hiddenSelect(o.option);
}
};
this.add = function (o, name) {
//创建SELECT菜单
createSelect(o, name);
o.style.width = (/MSIE/.test(window.navigator.userAgent) ? 127 : 131);
o.option = createOption(o);
o.selectedIndex = null;
o.options = new Object();
o.deloptions = new Array();
o.options.maxNum = 0;
o.options.length = 0;
o.add = add;
o.del = del;
o.upselected = upselected;
o.onmousedown = oDown;
};
this.upFontColor = function (over, out) {
//修改 over && out 文字颜色
optionFontColor = [over, out];
};
this.upBackGroundColor = function (over, out) {
//修改 over && out 背景颜色
optionBackGroundColor = [over, out];
};
}
window.onload = function () {
var menu = new selectMenu;
var wc1 = $("wc1"), wc2 = $("wc2");
menu.add(wc1, "wc1");
menu.add(wc2, "wc2");
menu = null;
wc1.add("scan", "菜单内容好多的说");
wc1.add("WC", "Name");
wc1.add(18, "Age");
wc1.add("WC1", "Name1");
wc1.add(18.1, "Age1");
wc1.add("WC2", "Name2");
wc1.del(2);
wc1.upselected(1);
wc2.add("scan", "菜单内容好多的说");
wc2.add("WC", "Name");
wc2.add(18, "Age", true);
window.status = wc1.options.length;
}
</script>
</head>
<body>
<form method="post" action="Server_Select.asp">
<center>
<div id="wc1"></div>
<div id="wc2"></div>
<input type="submit" value="提交" />
</center>
</form>
</body>
</html>