一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

用javascript實現(xiàn)select的美化的方法

論壇經(jīng)常有人會問到用CSS如何美化Select標(biāo)簽,其實但凡你看到很酷的都是用Javascript來實現(xiàn)的。昨天試著做了一下,基本實現(xiàn)的初級功能。拿出來和大家一起分享一下。先可以看一下預(yù)覽效果:http://www.iwcn.NET/demo/select。
【功能需求】
1、調(diào)用要方便,做好之后應(yīng)該像這樣:
復(fù)制代碼 代碼如下:
function loadSelect(selectobj){ 
//傳入一個select對象就能將他的樣式美化 


2、不改變原有表單項,表單的頁面代碼不去破壞:
復(fù)制代碼 代碼如下:
<form name="f" onsubmit="getResult();"> 
    <fieldset> 
        <legend>用戶注冊</legend> 
        <div> 
            <label for="username">帳號</label> 
            <input type="text" id="username" name="username" /> 
        </div> 
        <div> 
            <label for="pwd">密碼</label> 
            <input type="password" name="pwd" id="pwd" /> 
        </div> 
        <div> 
            <label for="province">省份</label> 
            <select id="province" name="province"> 
                <option value="10">江西</option> 
                <option value="11">福建</option> 
                <option value="12">廣東</option> 
                <option value="13">浙江</option> 
            </select> 
        </div> 
    </fieldset> 
    <input type="submit" value="提交" name="btnSub" /> 
</form> 

【實現(xiàn)思路】

第一步:將表單中的select隱藏起來。
為什么?很簡單,因為這家伙太頑固了,用css根本搞不出來你想要的。所以把它殺掉。

第二步:用腳本找到select標(biāo)簽在網(wǎng)頁上的絕對位置。
我們在那個位置上用DIV標(biāo)簽做個假的、好看點的來當(dāng)他的替身。

第三步:用腳本把select標(biāo)簽中的值讀出來。
雖然藏起來了,但它里邊的options我們還有用呢,統(tǒng)統(tǒng)取過來。

第四步:當(dāng)用戶點擊select標(biāo)簽的替身,也就是div的時候。我們再用一個div浮在上一個div的下邊,這個就是options的替身了。

大致上就是這樣了,接下來我們一步一步去實現(xiàn)它!

【準(zhǔn)備工作】
1、想好你要把select美化成什么樣子,并準(zhǔn)備好相應(yīng)的圖片。我準(zhǔn)備了兩張小圖,就是下拉箭頭1和下拉箭頭2,1是默認樣式,2是鼠標(biāo)移過來的樣式。
2、寫好一個普通的表單遞交頁面,比如下邊這個。注意我給select定義了基本的CSS樣式、在頭部添加了調(diào)用js文件的代碼、在body中添加了調(diào)用函數(shù)的腳本。

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
【編寫Javascript】 
復(fù)制代碼 代碼如下:
<script type="text/Javascript" src="select.js"></script>

新建一個js文件并保存為select.js,剩下的工作我們?nèi)吭谶@個js中去完成。
函數(shù)名:loadSelect(obj);
參數(shù):select對象
相關(guān)函數(shù):
復(fù)制代碼 代碼如下:
function Offset(e) 
//取標(biāo)簽的絕對位置 

    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的絕對位置記錄下來。一會替身上來就知道應(yīng)該站那里了。

var offset=Offset(obj);
//這里解釋一下Offset是一個函數(shù),用來獲取對象的絕對位置。寫在loadSelect()函數(shù)外邊的。他有四個屬性分別是top/left/width/height。
第二步:將select隱藏。
復(fù)制代碼 代碼如下:
obj.style.display="none"; 

第三步:虛擬一個div出來代替select 
復(fù)制代碼 代碼如下:
    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沒人選中的值給它。
復(fù)制代碼 代碼如下:
iDiv.innerHTML=obj.options[obj.selectedIndex].innerHTML; 

第五步:為替身添加鼠標(biāo)移過樣式。 
復(fù)制代碼 代碼如下:
    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)點擊事件。 
復(fù)制代碼 代碼如下:
   iDiv.onclick=function(){//鼠標(biāo)點擊 
        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{ 
            //初始一個div放在上一個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); 
                    //同時我們把下拉的關(guān)閉掉。 
                    document.getElementById("selectchild" + obj.name).style.display="none"; 
                    childCreate=false; 
                    iDiv.innerHTML=this.innerHTML; 
                } 
            } 
        } 
    } 


最后這個比較復(fù)雜一點,再解釋一下,我們在做這一步之前,select的樣子已經(jīng)出來了,下一步就是再加一個div去模仿select被點擊之后出現(xiàn)的下拉選項了。我們可以講select標(biāo)簽的options通過Javascript提取出來,把它寫成這樣:
復(fù)制代碼 代碼如下:
<div> 
    <ul> 
        <li>optionName</li> 
        <li>optionName</li> 
        <li>optionName</li> 
    </ul> 
</div> 

基本上就這樣了。還有些缺陷,有時間大家可以一起補充!

JavaScript技術(shù)用javascript實現(xiàn)select的美化的方法,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲国产最新 | 视频一区二区中文字幕 | 自拍偷自拍亚洲精品被多人伦好爽 | 久久夜色国产精品噜噜 | 亚洲第一中文字幕 | 国产精品麻豆久久99 | 久久久久久综合 | 欧美麻豆久久久久久中文 | 日韩精品首页 | 久久激情小说 | 久久精选视频 | 激情视频激情图片激情小说 | 国产欧美日韩haodiaose | 国产成人久久精品推最新 | 激情五月婷婷综合网 | 色欧美与xxxxx | 爽爽影院色黄网站在线观看 | 在线色 | 五月天婷婷色 | 国产91福利| 婷婷丁香花麻豆 | 中文字幕久热精品视频免费 | 欧美福利小视频 | 精品国产成人a区在线观看 精品国产成人a在线观看 | 亚洲成人福利在线 | 露脸国产自产拍在线观看 | 99久久精品国内 | 九九九精品在线观看 | 国产婷婷综合在线视频中 | 亚洲国产精品综合久久一线 | 婷婷三级 | 黄色网址免费在线 | 国产精品福利一区二区 | 成人三级视频在线观看 | 国产91久久精品 | 中文字幕日韩专区精品系列 | 91综合精品网站久久 | 国产在线99 | 亚洲乱码一二三四区国产 | 亚洲视频免费一区 | 天天综合网在线 |