一区二区久久-一区二区三区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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲国产精品久久久久网站 | 日本精品免费 | 日韩久久久精品中文字幕 | 伊人伊成久久人综合网777 | 久热中文字幕在线精品免费 | 91精品一区二区综合在线 | 久9视频这里只有精品 | 91青青操| 色女人综合 | 欧美国产亚洲精品a第一页 欧美国产一区二区二区 | 亚洲你我色 | a级精品国产片在线观看 | 五月开心六月伊人色婷婷 | 无遮挡一级毛片 | 欧美日韩亚洲一区二区精品 | 天天天做天天天天爱天天想 | 国产综合色在线视频 | 小黄网站有哪些在线观看 | 91精品国产免费青青碰在线观看 | 一区二区三区高清视频在线观看 | 中文字幕在线一区二区在线 | 亚洲欧美在线免费 | 在线欧美色 | 激情小说区 | 亚洲国产视频网站 | 天天综合日日噜噜噜 | 午夜视频精品 | 美女扒开屁股让男人桶视频网站 | 国内精品伊人久久大香线焦 | 色婷五月天 | 激情图片小说 | 婷婷影院在线综合免费视频 | 91精品国产免费网站 | 亚色在线播放 | 91国自产精品中文字幕亚洲 | 成人亚洲视频在线观看 | 国产精品成人嫩妇 | 免费国产人做人视频在线观看 | 午夜性色视频 | 国色天香精品亚洲精品 | 加比勒精品视频在线观看 |