不用整天为美化select控件烦恼了。 1、可批量美化select控件。
2、可以有onchange句柄。
3、触发onchange的函数可带参数。
3、可以得到select的值。
4、可设置像select类似的滚动条(如大于或等于8个数目时出现滚动条)
5、可设置宽度和高度
API参考:
//首先生成一个simulateSelect的实例
//构造函数的第一个可选参数为触发onchange的函数,其它的为onchange函数的参数;
c = new simulateSelect(s1onchange, "never-online");
//设置select的CSS,第一个参数为控件的主要CSS、第二个为选中条目时的CSS、第三个为没有选中条目时的CSS
c.style("CtlSelect2", "selected2", "unselected2");
//设置select的宽度和高度;
c.width = 320;
c.height = 20;
//初始化参数为:select控件的ID,可以用逗号分离,进行批量转换;
c.init("s1,s2,s3");
下一版本将可修改combox
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">MdMLinux联盟
<HTML>MdMLinux联盟
<HEAD>MdMLinux联盟
<TITLE> simulate combox control - http://www.never-online.net </TITLE>MdMLinux联盟
<META NAME="Generator" CONTENT="EditPlus">MdMLinux联盟
<META NAME="Author" CONTENT="">MdMLinux联盟
<META NAME="Keywords" CONTENT="">MdMLinux联盟
<META NAME="Description" CONTENT="">MdMLinux联盟
<style>MdMLinux联盟
body, inputMdMLinux联盟
{MdMLinux联盟
font-family: verdana;MdMLinux联盟
font-size: 9pt;MdMLinux联盟
}MdMLinux联盟
h1MdMLinux联盟
{MdMLinux联盟
font-family: tahoma;MdMLinux联盟
font-size: 22pt;MdMLinux联盟
text-align: left;MdMLinux联盟
}MdMLinux联盟
preMdMLinux联盟
{MdMLinux联盟
font-size: 9pt;MdMLinux联盟
font-family: verdana;MdMLinux联盟
border: 1px solid #006600;MdMLinux联盟
width: 400px;MdMLinux联盟
padding: 10px;MdMLinux联盟
background: #ffffff;MdMLinux联盟
color: #006600;MdMLinux联盟
}MdMLinux联盟
.CtlSelectMdMLinux联盟
{MdMLinux联盟
border: 1px solid #006600;MdMLinux联盟
font-family: verdana;MdMLinux联盟
height: 20px;MdMLinux联盟
color: #006600;MdMLinux联盟
background: #ffffff;MdMLinux联盟
/*background:url({E5066804-650D-4757-9BA4-A92DB8817A18}0.jpg);*/MdMLinux联盟
}MdMLinux联盟
.selectedMdMLinux联盟
{MdMLinux联盟
background: #006600;MdMLinux联盟
color: #ffffff;MdMLinux联盟
height: 20px;MdMLinux联盟
}MdMLinux联盟
.unselectedMdMLinux联盟
{MdMLinux联盟
height: 20px;MdMLinux联盟
color: #006600;MdMLinux联盟
line-height: 120%;MdMLinux联盟
border-bottom: 1px solid #006600;MdMLinux联盟
}MdMLinux联盟
.CtlSelect1MdMLinux联盟
{MdMLinux联盟
border: 1px solid #003399;MdMLinux联盟
font-family: verdana;MdMLinux联盟
height: 20px;MdMLinux联盟
color: #003399;MdMLinux联盟
background: #ffffff;MdMLinux联盟
/*background:url({E5066804-650D-4757-9BA4-A92DB8817A18}0.jpg);*/MdMLinux联盟
}MdMLinux联盟
.selected1MdMLinux联盟
{MdMLinux联盟
background: #003399;MdMLinux联盟
color: #ffffff;MdMLinux联盟
height: 20px;MdMLinux联盟
}MdMLinux联盟
.unselected1MdMLinux联盟
{MdMLinux联盟
height: 20px;MdMLinux联盟
color: #003399;MdMLinux联盟
line-height: 120%;MdMLinux联盟
border-bottom: 1px solid #003399;MdMLinux联盟
}MdMLinux联盟
.CtlSelect2MdMLinux联盟
{MdMLinux联盟
border: 1px solid #990000;MdMLinux联盟
font-family: verdana;MdMLinux联盟
height: 20px;MdMLinux联盟
color: #990000;MdMLinux联盟
background: #ffffff;MdMLinux联盟
/*background:url({E5066804-650D-4757-9BA4-A92DB8817A18}0.jpg);*/MdMLinux联盟
}MdMLinux联盟
.selected2MdMLinux联盟
{MdMLinux联盟
background: #990000;MdMLinux联盟
color: #ffffff;MdMLinux联盟
height: 20px;MdMLinux联盟
}MdMLinux联盟
.unselected2MdMLinux联盟
{MdMLinux联盟
height: 20px;MdMLinux联盟
color: #990000;MdMLinux联盟
line-height: 120%;MdMLinux联盟
border-bottom: 1px solid #990000;MdMLinux联盟
}MdMLinux联盟
.copyrightMdMLinux联盟
{MdMLinux联盟
margin-top: 10px;MdMLinux联盟
font-size: 9pt;MdMLinux联盟
text-align: center;MdMLinux联盟
color: #333;MdMLinux联盟
font-weight: bold;MdMLinux联盟
}MdMLinux联盟
</style>MdMLinux联盟
</HEAD>
<BODY>MdMLinux联盟
<SCRIPT LANGUAGE="JavaScript">MdMLinux联盟
<!--MdMLinux联盟
//-------------------------------------------------------------MdMLinux联盟
// @ Module: simulate select control, IE only.MdMLinux联盟
// @ Debug in: IE 6.0MdMLinux联盟
// @ Script by: blueDestiny, never-onlineMdMLinux联盟
// @ Updated: 2006-3-22MdMLinux联盟
// @ Version: 1.0 aphaMdMLinux联盟
// @ Email: blueDestiny [at] 126.comMdMLinux联盟
// @ Website: http://www.never-online.netMdMLinux联盟
// @ Please Hold this item please.MdMLinux联盟
//MdMLinux联盟
// APIMdMLinux联盟
// @ class: simulateSelect()MdMLinux联盟
//MdMLinux联盟
// @ object.style(ctlStyle[,selStyle][,unselStyle])MdMLinux联盟
// ctlStyle: main control combox css class nameMdMLinux联盟
// selStyle: when mouseover or option focus css class nameMdMLinux联盟
// unselStyle: options blur's css class nameMdMLinux联盟
//MdMLinux联盟
// @ object.width=(widthPX)MdMLinux联盟
// widthPX must be a digit number.MdMLinux联盟
//MdMLinux联盟
// @ object.height=(heightPX)MdMLinux联盟
// heightPX must be a digit number.MdMLinux联盟
//MdMLinux联盟
// @ object.getValue(ctlSelID)MdMLinux联盟
// ctlSelID is the unique select control IDMdMLinux联盟
//MdMLinux联盟
// -------------- for the next Version ----------MdMLinux联盟
// @ object.readOnly = (blnReadOnly)MdMLinux联盟
// blnReadOnly must be a boolean type or a number type.MdMLinux联盟
// @ object.addEvent(w, h)MdMLinux联盟
// w: fire handler's event.MdMLinux联盟
// h: handler function.MdMLinux联盟
//-------------------------------------------------------------
function $(objID)MdMLinux联盟
{MdMLinux联盟
return document.getElementById(objID);MdMLinux联盟
};MdMLinux联盟
function Offset(e)MdMLinux联盟
{MdMLinux联盟
var t = e.offsetTop;MdMLinux联盟
var l = e.offsetLeft;MdMLinux联盟
var w = e.offsetWidth;MdMLinux联盟
var h = e.offsetHeight-2;
while(e=e.offsetParent)MdMLinux联盟
{MdMLinux联盟
t+=e.offsetTop;MdMLinux联盟
l+=e.offsetLeft;MdMLinux联盟
}MdMLinux联盟
return {MdMLinux联盟
top : t,MdMLinux联盟
left : l,MdMLinux联盟
width : w,MdMLinux联盟
height : hMdMLinux联盟
}MdMLinux联盟
}MdMLinux联盟
//-----------------------------------------------MdMLinux联盟
function simulateSelect(handlerFunction) { with(this)MdMLinux联盟
{MdMLinux联盟
this.IDs = [];MdMLinux联盟
this.name = this;MdMLinux联盟
this.value = null;MdMLinux联盟
this.onchangeArgs = [];MdMLinux联盟
this.onchange = handlerFunction;MdMLinux联盟
this.height = 20;MdMLinux联盟
this.width = null;MdMLinux联盟
this.number = null;MdMLinux联盟
this.ctlStyle = "CtlSelect";MdMLinux联盟
this.selStyle = "selected";MdMLinux联盟
this.unselStyle = "unselected";MdMLinux联盟
this.elementPrefix = "e__";MdMLinux联盟
this.inputPrefix = "i__";MdMLinux联盟
this.containerPrefix = "c__";MdMLinux联盟
this.buttonPrefix = "b__";MdMLinux联盟
// property for beta VersionMdMLinux联盟
// can editable comboxMdMLinux联盟
this.readonly = true;MdMLinux联盟
if( arguments.length>0 )MdMLinux联盟
for(var i=0; i<arguments.length; i++)MdMLinux联盟
onchangeArgs[i-1] = arguments[i];MdMLinux联盟
return this;MdMLinux联盟
}};MdMLinux联盟
simulateSelect.prototype.init = function(ctlSelIDs) { with(this)MdMLinux联盟
{MdMLinux联盟
eval(name).append(ctlSelIDs);MdMLinux联盟
eval(name).simulates();MdMLinux联盟
}};
simulateSelect.prototype.style = function() { with(this)MdMLinux联盟
{MdMLinux联盟
ctlStyle = arguments[0];MdMLinux联盟
selStyle = arguments[1];MdMLinux联盟
unselStyle = arguments[2];MdMLinux联盟
}};MdMLinux联盟
//-----------------------------------------------MdMLinux联盟
simulateSelect.prototype.append = function(ctlSelIDs) { with(this)MdMLinux联盟
{MdMLinux联盟
if( ctlSelIDs.indexOf(",")>0 )MdMLinux联盟
{MdMLinux联盟
var arrCtlSel = ctlSelIDs.split(",");MdMLinux联盟
for(var i=0; i<arrCtlSel.length; i++)MdMLinux联盟
{MdMLinux联盟
IDs.push(arrCtlSel[i]);MdMLinux联盟
}MdMLinux联盟
}MdMLinux联盟
elseMdMLinux联盟
IDs.push(ctlSelIDs);MdMLinux联盟
}};MdMLinux联盟
simulateSelect.prototype.checkupOnMouseDown = function(e) { with(this)MdMLinux联盟
{MdMLinux联盟
// here compatible mf.MdMLinux联盟
var el = e ? e.srcElement : e.target;MdMLinux联盟
if( el.id.indexOf(elementPrefix)>-1 || MdMLinux联盟
el.id.indexOf(inputPrefix)>-1 || MdMLinux联盟
el.id.indexOf(containerPrefix)>-1 || MdMLinux联盟
el.id.indexOf(buttonPrefix)>-1 )MdMLinux联盟
{MdMLinux联盟
return;MdMLinux联盟
}MdMLinux联盟
elseMdMLinux联盟
{MdMLinux联盟
for(var i=0; i<eval(name).IDs.length; i++)MdMLinux联盟
if( $(containerPrefix + IDs[i]) )MdMLinux联盟
$(containerPrefix + IDs[i]).style.display = "none";MdMLinux联盟
}
}};MdMLinux联盟
simulateSelect.prototype.simulates = function() { with(this)MdMLinux联盟
{MdMLinux联盟
for(var i=0; i<IDs.length; i++)MdMLinux联盟
eval(name).simulate(IDs[i]);MdMLinux联盟
}};MdMLinux联盟
simulateSelect.prototype.simulate = function(ctlSelID) { with (this)MdMLinux联盟
{MdMLinux联盟
var input;MdMLinux联盟
var button;MdMLinux联盟
var object;MdMLinux联盟
var offset;
object = $(ctlSelID);MdMLinux联盟
offset = Offset(object);MdMLinux联盟
input = document.createElement("INPUT");MdMLinux联盟
button = document.createElement("BUTTON");MdMLinux联盟
button.setAttribute("id", buttonPrefix + ctlSelID);MdMLinux联盟
//button.value = "⊿";MdMLinux联盟
button.value = "6";MdMLinux联盟
button.style.fontFamily = "Webdings, Marlett";MdMLinux联盟
button.style.background = "";MdMLinux联盟
button.onclick = input.onclick = function()MdMLinux联盟
{MdMLinux联盟
this.blur();MdMLinux联盟
eval(name).expand(ctlSelID, offset);MdMLinux联盟
};MdMLinux联盟
input.onselectstart = function()MdMLinux联盟
{MdMLinux联盟
eval(name).expand(ctlSelID, offset);MdMLinux联盟
event.returnValue = false; MdMLinux联盟
};
input.setAttribute("id", inputPrefix + ctlSelID);MdMLinux联盟
input.title = button.title = "click expand options";MdMLinux联盟
input.style.cursor = button.style.cursor = "default";MdMLinux联盟
input.className = button.className = ctlStyle;MdMLinux联盟
input.style.width = (width>0 ? width : object.offsetWidth);MdMLinux联盟
height ? input.style.height=button.style.height=height : "";MdMLinux联盟
input.value = value = object[0].text;MdMLinux联盟
if( readonly==true ) input.readOnly=true;
// this method is only IE.MdMLinux联盟
object.insertAdjacentElement("afterEnd",button);MdMLinux联盟
object.insertAdjacentElement("afterEnd",input);MdMLinux联盟
object.style.display = 'none';MdMLinux联盟
}};MdMLinux联盟
simulateSelect.prototype.expand = function(ctlSelID, offset) { with(this)MdMLinux联盟
{MdMLinux联盟
var div;MdMLinux联盟
var object = $(ctlSelID);
if( !$(containerPrefix + ctlSelID) )MdMLinux联盟
{MdMLinux联盟
div = document.createElement("DIV");MdMLinux联盟
div.style.position = "absolute";MdMLinux联盟
div.style.display = "block";MdMLinux联盟
div.setAttribute("id", containerPrefix + ctlSelID);MdMLinux联盟
div.className = ctlStyle;MdMLinux联盟
div.style.left = offset.left;MdMLinux联盟
div.style.top = offset.top + offset.height;MdMLinux联盟
div.style.width = (width ? width : offset.width) + 20;MdMLinux联盟
if( number )MdMLinux联盟
{MdMLinux联盟
div.style.height = height * number;MdMLinux联盟
div.style.overflow = "auto";MdMLinux联盟
}MdMLinux联盟
document.body.appendChild(div);
for(var i=0; i<object.length; i++)MdMLinux联盟
{MdMLinux联盟
div = document.createElement("DIV");MdMLinux联盟
div.setAttribute("id", div.id = elementPrefix + ctlSelID + i);MdMLinux联盟
div.style.cursor = "default";
if( object[i].text==$(inputPrefix + ctlSelID).value )MdMLinux联盟
div.className = selStyle;MdMLinux联盟
elseMdMLinux联盟
div.className = unselStyle;
div.innerText = div.title = object[i].text;MdMLinux联盟
div.style.height = height;MdMLinux联盟
div.setAttribute("value", object[i].value);
div.onmouseover = function()MdMLinux联盟
{MdMLinux联盟
for(var j=0; j<$(containerPrefix + ctlSelID).childNodes.length; j++)MdMLinux联盟
{MdMLinux联盟
if($(containerPrefix + ctlSelID).childNodes[j]==this)MdMLinux联盟
$(containerPrefix + ctlSelID).childNodes[j].className = selStyle;MdMLinux联盟
elseMdMLinux联盟
$(containerPrefix + ctlSelID).childNodes[j].className = unselStyle;MdMLinux联盟
} MdMLinux联盟
};MdMLinux联盟
div.onclick = function()MdMLinux联盟
{MdMLinux联盟
$(inputPrefix + ctlSelID).value = this.innerText;MdMLinux联盟
$(containerPrefix + ctlSelID).style.display = "none";MdMLinux联盟
if( onchange && value!=$(inputPrefix + ctlSelID).value )MdMLinux联盟
{MdMLinux联盟
onchange.apply(this,onchangeArgs);MdMLinux联盟
value = $(inputPrefix + ctlSelID).value;MdMLinux联盟
}MdMLinux联盟
};MdMLinux联盟
$(containerPrefix + ctlSelID).appendChild(div);MdMLinux联盟
}MdMLinux联盟
return;MdMLinux联盟
}
if( $(containerPrefix + ctlSelID).style.display=="none" )MdMLinux联盟
{MdMLinux联盟
for(var i=0; i<object.length; i++)MdMLinux联盟
{MdMLinux联盟
if( object[i].text==$(inputPrefix + ctlSelID).value )MdMLinux联盟
$(elementPrefix + ctlSelID + i).className = selStyle;MdMLinux联盟
elseMdMLinux联盟
$(elementPrefix + ctlSelID + i).className = unselStyle;MdMLinux联盟
}MdMLinux联盟
$(containerPrefix + ctlSelID).style.display="block";MdMLinux联盟
return;MdMLinux联盟
}
if( $(containerPrefix + ctlSelID).style.display=="block" )MdMLinux联盟
{MdMLinux联盟
$(containerPrefix + ctlSelID).style.display="none";MdMLinux联盟
return;MdMLinux联盟
}MdMLinux联盟
}};MdMLinux联盟
simulateSelect.prototype.getValue = function(ctlSelID) { with(this)MdMLinux联盟
{MdMLinux联盟
if( $(inputPrefix + ctlSelID) )MdMLinux联盟
return $(inputPrefix + ctlSelID).value;MdMLinux联盟
elseMdMLinux联盟
return null;MdMLinux联盟
}};MdMLinux联盟
simulateSelect.prototype.addEvent = function(w, h) { with(this)MdMLinux联盟
{MdMLinux联盟
}};MdMLinux联盟
//-----------------------------------------------MdMLinux联盟
//window.onerror = Function("return true;");MdMLinux联盟
// IE only.MdMLinux联盟
document.attachEvent("onmousedown", function() {MdMLinux联盟
a.checkupOnMouseDown(event);MdMLinux联盟
b.checkupOnMouseDown(event);MdMLinux联盟
c.checkupOnMouseDown(event)MdMLinux联盟
});MdMLinux联盟
window.attachEvent("onload", function() {MdMLinux联盟
window.a = new simulateSelect();MdMLinux联盟
a.style("CtlSelect", "selected", "unselected");MdMLinux联盟
a.init("s1");MdMLinux联盟
//-------------------------------------------MdMLinux联盟
window.b = new simulateSelect();MdMLinux联盟
b.style("CtlSelect1", "selected1", "unselected1");MdMLinux联盟
b.width = 300;MdMLinux联盟
b.number = 9;MdMLinux联盟
b.init("s2");MdMLinux联盟
//-------------------------------------------MdMLinux联盟
window.c = new simulateSelect(s1onchange, "never-online", a.getValue('s1'));MdMLinux联盟
c.style("CtlSelect2", "selected2", "unselected2");MdMLinux联盟
c.width = 320;MdMLinux联盟
c.init("s3");MdMLinux联盟
});MdMLinux联盟
function s1onchange(para, s)MdMLinux联盟
{MdMLinux联盟
alert("onchage handler fire " + para + s);MdMLinux联盟
}MdMLinux联盟
//-->MdMLinux联盟
</SCRIPT>MdMLinux联盟
<h1> simulate combox control </h1>MdMLinux联盟
<h4> demonstrate </h4>
<p>MdMLinux联盟
normal select: <select id="s0">MdMLinux联盟
<option value="- please select your options -"> - please select your options -</option>MdMLinux联盟
<option value="1">option1</option>MdMLinux联盟
<option value="2">option2</option>MdMLinux联盟
<option value="3">option3</option>MdMLinux联盟
<option value="4">option4</option>MdMLinux联盟
<option value="5">option5</option>MdMLinux联盟
</select>MdMLinux联盟
</p>
<p>MdMLinux联盟
simulate select: <select id="s1">MdMLinux联盟
<option value="- please select your options -"> - please select your options -</option>MdMLinux联盟
<option value="1">1option1</option>MdMLinux联盟
<option value="2">1option2</option>MdMLinux联盟
<option value="3">1option3</option>MdMLinux联盟
<option value="4">1option4</option>MdMLinux联盟
<option value="5">1option5</option>MdMLinux联盟
</select>MdMLinux联盟
</p>
<p>MdMLinux联盟
scroll simulate select: <select id="s2">MdMLinux联盟
<option value="- please select your options -"> - please select your options -</option>MdMLinux联盟
<option value="1">2option1</option>MdMLinux联盟
<option value="2">2option2</option>MdMLinux联盟
<option value="3">2option3</option>MdMLinux联盟
<option value="4">2option4</option>MdMLinux联盟
<option value="5">2option6</option>MdMLinux联盟
<option value="5">2option7</option>MdMLinux联盟
<option value="5">2option8</option>MdMLinux联盟
<option value="5">2option9</option>MdMLinux联盟
<option value="5">2option10</option>MdMLinux联盟
<option value="5">2option11</option>MdMLinux联盟
<option value="5">2option12</option>MdMLinux联盟
<option value="5">2option13</option>MdMLinux联盟
<option value="5">2option14</option>MdMLinux联盟
</select>MdMLinux联盟
</p>
<p>MdMLinux联盟
onchange handler fire: <select id="s3">MdMLinux联盟
<option value="- please select your options -"> - please select your options -</option>MdMLinux联盟
<option value="1">3option1</option>MdMLinux联盟
<option value="2">3option2</option>MdMLinux联盟
<option value="3">3option3</option>MdMLinux联盟
<option value="4">3option4</option>MdMLinux联盟
<option value="5">3option5</option>MdMLinux联盟
</select>MdMLinux联盟
</p>
<button onclick="alert(a.getValue('s1') + '\n\n' + b.getValue('s2') + '\n\n' + c.getValue('s3'))" class="CtlSelect"> Get value </button>MdMLinux联盟
<button onclick="alert('next version')" class="CtlSelect">append item</button>MdMLinux联盟
<button onclick="alert('next version')" class="CtlSelect">remove item</button>
<h4> description </h4>MdMLinux联盟
<pre>MdMLinux联盟
//-------------------------------------------------------------MdMLinux联盟
// @ Module: simulate select control, IE only.MdMLinux联盟
// @ Debug in: IE 6.0MdMLinux联盟
// @ Script by: blueDestiny, never-onlineMdMLinux联盟
// @ Updated: 2006-3-22MdMLinux联盟
// @ Version: 1.0 aphaMdMLinux联盟
// @ Email: blueDestiny [at] 126.comMdMLinux联盟
// @ Website: http://www.never-online.netMdMLinux联盟
// @ Please Hold this item please.MdMLinux联盟
//MdMLinux联盟
// APIMdMLinux联盟
// @ class: simulateSelect()MdMLinux联盟
//MdMLinux联盟
// @ object.style(ctlStyle[,selStyle][,unselStyle])MdMLinux联盟
// ctlStyle: main control combox css class nameMdMLinux联盟
// selStyle: when mouseover or option focus css class nameMdMLinux联盟
// unselStyle: options blur's css class nameMdMLinux联盟
//MdMLinux联盟
// @ object.width=(widthPX)MdMLinux联盟
// widthPX must be a digit number.MdMLinux联盟
//MdMLinux联盟
// @ object.height=(heightPX)MdMLinux联盟
// heightPX must be a digit number.MdMLinux联盟
//MdMLinux联盟
// @ object.getValue(ctlSelID)MdMLinux联盟
// ctlSelID is the unique select control IDMdMLinux联盟
//MdMLinux联盟
// -------------- for the next Version ----------MdMLinux联盟
// @ object.readOnly = (blnReadOnly)MdMLinux联盟
// blnReadOnly must be a boolean type or a number type.MdMLinux联盟
// @ object.addEvent(w, h)MdMLinux联盟
// w: fire handler's event.MdMLinux联盟
// h: handler function.MdMLinux联盟
//-------------------------------------------------------------MdMLinux联盟
</pre>
<div class="copyright">MdMLinux联盟
Power By blueDestiny, never-onlineMdMLinux联盟
http://www.never-online.netMdMLinux联盟
</div>MdMLinux联盟
</BODY>MdMLinux联盟
</HTML> MdMLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论