編寫javascript
<script type="text/javascript" src="select.js"></script>
新建一個(gè)js文件并保存為select.js,剩下的工作我們?nèi)吭谶@個(gè)js中去完成。
函數(shù)名:loadSelect(obj); 參數(shù):select對(duì)象
相關(guān)函數(shù):
//取標(biāo)簽的絕對(duì)位置 { var t = e.offsetTop; var l = e.offsetLeft; var w = e.offsetWidth; var h = e.offsetHeight-2;
while(e=e.offsetParent) { t+=e.offsetTop; l+=e.offsetLeft; } return { top : t, left : l, width : w, height : h } }
第一步:把select的絕對(duì)位置記錄下來。一會(huì)替身上來就知道應(yīng)該站那里了。
var offset=Offset(obj); //這里解釋一下Offset是一個(gè)函數(shù),用來獲取對(duì)象的絕對(duì)位置。寫在loadSelect()函數(shù)外邊的。他有四個(gè)屬性分別是top/left/width/height。
第二步:將select隱藏。
obj.style.display="none";
第三步:虛擬一個(gè)div出來代替select
var iDiv = document.createElement("div"); iDiv.id="selectof" + obj.name; iDiv.style.position = "absolute"; iDiv.style.width=offset.width + "px"; iDiv.style.height=offset.height + "px"; iDiv.style.top=offset.top + "px"; iDiv.style.left=offset.left + "px"; iDiv.style.background="url(icon_select.gif) no-repeat right 4px"; iDiv.style.border="1px solid #3366ff"; iDiv.style.fontSize="12px"; iDiv.style.lineHeight=offset.height + "px"; iDiv.style.textIndent="4px"; document.body.appendChild(iDiv);
第四步:把原始select沒人選中的值給它。
iDiv.innerHTML=obj.options[obj.selectedIndex].innerHTML;
第五步:為替身添加鼠標(biāo)移過樣式。
iDiv.onmouseover=function(){//鼠標(biāo)移到 iDiv.style.background="url(icon_select_focus.gif) no-repeat right 4px"; } iDiv.onmouseout=function(){//鼠標(biāo)移走 iDiv.style.background="url(icon_select.gif) no-repeat right 4px"; }
第六步:添加關(guān)鍵的鼠標(biāo)點(diǎn)擊事件。
iDiv.onclick=function(){//鼠標(biāo)點(diǎn)擊 if (document.getElementById("selectchild" + obj.name)){ //判斷是否創(chuàng)建過div if (childCreate){ //判斷當(dāng)前的下拉是不是打開狀態(tài),如果是打開的就關(guān)閉掉。是關(guān)閉的就打開。 document.getElementById("selectchild"+ obj.name).style.display="none"; childCreate=false; }else{ document.getElementById("selectchild" + obj.name).style.display=""; childCreate=true; } }else{ //初始一個(gè)div放在上一個(gè)div下邊,當(dāng)options的替身。
var cDiv = document.createElement("div"); cDiv.id="selectchild" + obj.name; cDiv.style.position = "absolute"; cDiv.style.width=offset.width + "px"; cDiv.style.height=obj.options.length *20 + "px"; cDiv.style.top=(offset.top+offset.height+2) + "px"; cDiv.style.left=offset.left + "px"; cDiv.style.background="#f7f7f7"; cDiv.style.border="1px solid silver"; var uUl = document.createElement("ul"); uUl.id="uUlchild" + obj.name; uUl.style.listStyle="none"; uUl.style.margin="0"; uUl.style.padding="0"; uUl.style.fontSize="12px"; cDiv.appendChild(uUl); document.body.appendChild(cDiv); childCreate=true; for (var i=0;i<obj.options.length;i++){ //將原始的select標(biāo)簽中的options添加到li中 var lLi=document.createElement("li"); lLi.id=obj.options[i].value; lLi.style.textIndent="4px"; lLi.style.height="20px"; lLi.style.lineHeight="20px"; lLi.innerHTML=obj.options[i].innerHTML; uUl.appendChild(lLi); } var liObj=document.getElementById("uUlchild" + obj.name).getElementsByTagName("li"); for (var j=0;j<obj.options.length;j++){ //為li標(biāo)簽添加鼠標(biāo)事件 liObj[j].onmouseover=function(){ this.style.background="gray"; this.style.color="white"; } liObj[j].onmouseout=function(){ this.style.background="white"; this.style.color="black"; } liObj[j].onclick=function(){ //做兩件事情,一是將用戶選擇的保存到原始select標(biāo)簽中,要不做的再好看表單遞交后也獲取不到select的值了。 obj.options.length=0; obj.options[0]=new Option(this.innerHTML,this.id); //同時(shí)我們把下拉的關(guān)閉掉。 document.getElementById("selectchild" + obj.name).style.display="none"; childCreate=false; iDiv.innerHTML=this.innerHTML; } } } }
最后這個(gè)比較復(fù)雜一點(diǎn),再解釋一下,我們?cè)谧鲞@一步之前,select的樣子已經(jīng)出來了,下一步就是再加一個(gè)div去模仿select被點(diǎn)擊之后出現(xiàn)的下拉選項(xiàng)了。我們可以講select標(biāo)簽的options通過javascript提取出來,把它寫成這樣:
<div> <ul> <li>optionName</li> <li>optionName</li> <li>optionName</li> </ul> </div>
基本上就這樣了。還有些缺陷,有時(shí)間大家可以一起補(bǔ)充!
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2741431-1-1.html
本文鏈接:http://www.95time.cn/tech/web/2007/4687.asp
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁 用javascript實(shí)現(xiàn)select的美化 [1] 下一頁
◎進(jìn)入論壇網(wǎng)頁制作、網(wǎng)站綜合版塊參加討論
|