| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2505 人关注过本帖
标题:[原创]JS+DIV模拟SELECT表单域
只看楼主 加入收藏
阳光白雪
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:39
帖 子:2220
专家分:0
注 册:2005-11-18
收藏
 问题点数:0 回复次数:5 
[原创]JS+DIV模拟SELECT表单域

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 阳光白雪 E-mail:chenmanyi0818@126.com QQ:254960392
*/ 时间: 2007-8-20 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

  最近在做一个AJAX项目,其中用到很多满屏层的模拟屏幕锁定,但有个很头痛的东西,就是下拉列表框始终会显示在层的上面,为了解决这个问题才写了这个JS类,个人感觉还好用,在这和大家分享下,有好的意见也请提出!

效果预览:

图片附件: 游客没有浏览图片的权限,请 登录注册


程序代码:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JS+DIV模拟SELECT表单元素</title>
<script language="javascript">
selOptions = {
name : "selOptions",//此处为数组的名称
data : new Array()
}
selOptions.data[0] = new Array("0","option0")
selOptions.data[1] = new Array("1","option1")
selOptions.data[2] = new Array("2","option2")
selOptions.data[3] = new Array("3","option3")
selOptions.data[4] = new Array("4","option4")
selOptions.data[5] = new Array("5","option5")
selOptions.data[6] = new Array("6","option6")
selOptions.data[7] = new Array("7","option7")
selOptions.data[8] = new Array("8","option8")
selOptions.data[9] = new Array("9","option9")
selOptions.data[10] = new Array("10","option10")
selOptions.data[11] = new Array("11","option11")
selOptions.data[12] = new Array("12","option12")
selOptions.data[13] = new Array("13","option13")
selOptions.data[14] = new Array("14","option14")
selOptions.data[15] = new Array("15","option15")

tmhSelect = {
//主调函数
//参数含义:容器,名称,数据[数组],默认项,宽度,动作(目标函数不能带参)
show : function(obj,selectName,dataObj,selOption,width,action){
var data = dataObj.data;
var _Obj = document.getElementById(obj);
if(!_Obj || typeof(_Obj) == "undefined"){return false;}
var s1 = document.createElement("div");
if(isNaN(width) || width==""){width=150;}else if(width<26){width=26;}
s1.style.width = width;
s1.onmouseleave = function(){tmhSelect.hidden(selectName)};
var str = "";
//判断是否有数据
if(data.length > 0){
//有数据时显示数据选项列表
str += "<input type='hidden' name='"+ selectName +"' id='"+ selectName +"' value='"+ tmhSelect.relv(selOption,data) +"'>";
str += "<div id='_a_"+ selectName +"' style='width:"+ width +"px;height:18px; border:1px #666666 solid;'>";
str += "<div id='_v_"+ selectName +"' style='position:relative;float:left;left:2px;width:"+ (width-22) +"px;height:18px;font-size:12px;overflow:hidden;line-height:18px;' onclick=\"tmhSelect.showOptions('"+ selectName +"');\">"+ tmhSelect.reStr(data,selOption) +"</div>";
str += "<div style='position:relative;float:right;right:0px;width:18px;height:18px;text-align:center;font-family:Webdings;font-size:16px;overflow:hidden;background-color:#CCCCCC;cursor:pointer!important;cursor:hand;' onclick=\"tmhSelect.showOptions('"+ selectName +"');\">6</div>";
str += "</div>";
str += "<div id='_b_"+ selectName +"' style='position:absolute; background-color:#FFFFFF; width:"+ width +"px; height:"+ tmhSelect.height(data.length) +"px;border:1px #666666 solid;overflow-x:hidden;overflow-y:auto;display:none; z-index:99999;'>";
for(i=0;i<data.length;i++){
str += "<div id='_s_"+ selectName +"' style='"+ tmhSelect.style(1,data[i][0],selOption) +"' onmouseover=\"tmhSelect.css(2,this,'"+ data[i][0] +"','"+ selectName +"')\" onmouseout=\"tmhSelect.css(1,this,'"+ data[i][0] +"','"+ selectName +"')\" onclick=\"tmhSelect.selected(this,'"+ data[i][0] +"',"+ dataObj.name +",'"+ action +"')\">"+ data[i][1] +"</div>";
}
str += "</div>";
}else{
//没有数据时显示一个空窗体
str += "<input type='hidden' name='"+ selectName +"' id='"+ selectName +"' value='"+ selOption +"'>";
str += "<div id='_a_"+ selectName +"' style='width:"+ width +"px;height:18px; border:1px #666666 solid;'>";
str += "<div id='_v_"+ selectName +"' style='position:relative;float:left;left:2px;width:"+ (width-22) +"px;height:18px;font-size:12px;overflow:hidden;line-height:18px;' onclick=\"tmhSelect.showOptions('"+ selectName +"');\"></div>";
str += "<div style='position:relative;float:right;right:0px;width:18px;height:18px;text-align:center;font-family:Webdings;font-size:16px;overflow:hidden;background-color:#CCCCCC;cursor:pointer!important;cursor:hand;' onclick=\"tmhSelect.showOptions('"+ selectName +"');\">6</div>";
str += "</div>";
str += "<div id='_b_"+ selectName +"' style='position:absolute; background-color:#FFFFFF; width:"+ width +"px; height:"+ tmhSelect.height(0) +"px;border:1px #666666 solid;overflow-x:hidden;overflow-y:auto;display:none; z-index:99999;'></div>";
}
s1.innerHTML = str;
_Obj.appendChild(s1);
},
//返回选定项的值
value : function(n){return document.getElementById(n).value;},
//返回选定项的文本
text : function(n){return document.getElementById("_v_"+ n).innerText;},
selected : function(o,v,dn,action){
var d = dn.data;
var n = o.id.replace(/(_s_)/gi,"")
document.getElementById(n).value = v;
document.getElementById("_v_"+ n).innerHTML = tmhSelect.reStr(d,v);
tmhSelect.showOptions(n)
for(var i=0;i<document.getElementById("_b_"+ n).childNodes.length;i++){
document.getElementById("_b_"+ n).childNodes[i].style.cssText = tmhSelect.style(1)
}
o.style.cssText = tmhSelect.style(2);
if(action!="" && action != null){
try{eval(action)}catch(e){}
}
},
relv : function(v,d){
for(i=0;i<d.length;i++){
if(d[i][0] == v){
return v;
}
}
if(v == null || v == ""){
return d[0][0];
}
},
reStr : function(d,m){
for(i=0;i<d.length;i++){
if(d[i][0] == m){
return d[i][1];
}
}
if(m == null || m == ""){
return d[0][1];
}
},
height : function(l){var h;if(l>10 || l<1)h = 10 * 15; else h = l * 15; h += 2;return h;},
showOptions : function(n){
var o = document.getElementById("_b_"+ n)
if(o.style.display == "none")
o.style.display ="";
else
o.style.display ="none";
_selectOptionsElm = o;
},
hidden : function(n){
document.getElementById("_b_"+ n).style.display ="none";
},
style : function(m,v1,v2){
var cs = "";
if(v1 == v2 && v1!="" && v1!=null){m=2;}
switch(m){
case 1:
cs = "height:15px; font-size:12px; line-height:15px; overflow:hidden; background-color:#FFFFFF; color:#000000; font-weight:normal;";
break;
case 2:
cs = "height:15px; font-size:12px; line-height:15px; overflow:hidden; background-color:#315DAD; color:#FFFFFF; font-weight:bold;";
break;
}
return cs;
},
css : function(s,obj,v,n){
var v1 = document.getElementById(n).value;
if(v == v1){
obj.style.cssText = tmhSelect.style(2);
return;
}else{
obj.style.cssText = tmhSelect.style(s)
}
}
}

function test(){
alert(tmhSelect.value('test'));
}
</script>
</head>

<body>
<div id="testdiv"></div><BR />
<input type="button" name="button" value="查看文本" onclick="alert(tmhSelect.text('test'))" />
<input type="button" name="button" value="查看选项值" onclick="alert(tmhSelect.value('test'))" />
<script language="javascript">
tmhSelect.show("testdiv","test",selOptions,"",160,"test()");
</script>
</body>
</html>

有问题大家可以在提出,也可以到:
http://blog.163.com/chenmanyi0818@126/blog/static/2001260200772044155574/提出!

[此贴子已经被作者于2007-8-20 17:45:46编辑过]

搜索更多相关主题的帖子: DIV SELECT 表单 模拟 中国 
2007-08-20 16:55
madpbpl
Rank: 4
等 级:贵宾
威 望:11
帖 子:2876
专家分:244
注 册:2007-4-5
收藏
得分:0 

感觉版主实现的例子和下面这个例子有些相似,发出来,希望对版主有所帮助

[转载]不用“多级联动菜单”而用“树型”来选择“省市县”吧!见到不少人还在使用几个<select>来做“省市县”的“多级联动菜单”,这种做法的用户体验还不如用“树型”来选择“省市县”!

我最近用jQuery(强大而灵活的JS开发框架)和MzTreeView(号称最快的JS树型列表)来实现了一个“省市县”的选择框!

演示地址:[url]http://www.lxasp.com/_tmp/jstree/[/url]

转载于:[url]http://www.lxasp.com/bbs/ShowPost.asp?ThreadID=13[/url]

2007-08-20 17:06
ayue222
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:341
专家分:0
注 册:2007-7-25
收藏
得分:0 

好极了 ...
不过 ...貌似在 FF下得不到文本值 .....

2007-08-20 17:07
ayue222
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:341
专家分:0
注 册:2007-7-25
收藏
得分:0 
还有个问题就是打开之后不点选选择框的话得不到选项值 ....显示为空而不是0..
2007-08-20 17:11
阳光白雪
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:39
帖 子:2220
专家分:0
注 册:2005-11-18
收藏
得分:0 
以下是引用ayue222在2007-8-20 17:07:35的发言:

好极了 ...
不过 ...貌似在 FF下得不到文本值 .....

没有在FF下测试,


专注于WEB前端交互平台开发:[url=http://blog./]blog.[/url](富客户端技术(RIA)交流平台)
2007-08-20 17:12
阳光白雪
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:39
帖 子:2220
专家分:0
注 册:2005-11-18
收藏
得分:0 
以下是引用ayue222在2007-8-20 17:11:00的发言:
还有个问题就是打开之后不点选选择框的话得不到选项值 ....显示为空而不是0..

已修改!


专注于WEB前端交互平台开发:[url=http://blog./]blog.[/url](富客户端技术(RIA)交流平台)
2007-08-20 17:47
快速回复:[原创]JS+DIV模拟SELECT表单域
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028178 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved