DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> select 美化,基於jquery
select 美化,基於jquery
編輯:AJAX詳解     
起因是在實踐中發現input的高度無法改變,也就是說再怎麼調整,他的四周都會有空隙,當然只作用於IE,如果調整一下的話,FF下效果又不理想,沒有什麼好的解決方法,除非用圖片模擬,為了追求完美,模擬就模擬吧。

本人習慣用jQuery,於是就找到了nicejform,專門用來美化表單的jquery插件。(我知道壇子上有相關的文章,我也參考過,但是美化不是我的強項,所以就想找現成的)

效果查看

看源碼,可以發現沒有另外添加樣式,id之類的,所以如果不用這個插件了,頁面也無需改動

眾所周知,表單美化裡面select是最不好模擬的,同樣nicejforms也沒有很好的模擬,那就自己動手改造吧。

3個半小時過去後......

終於被我征服了,徹底地模擬美化了select表單,可以說功能上一點都不差,修改了原版本的一些不足


           
  • 點擊頁面空白處,彈出的options不能縮回
           
  • 無法設置option的value值,一律都是"#"
           
  • 由於都設置為了"#",所以如果select放置到了頁面的下方,選擇後會回到頁面頂部


現在這些問題全都解決了,可以正式派上用場了,oh,yeah!

效果查看

點擊下載修改後的文件
10.1日添加

其實上面那個select美化有一個非常大的問題,不過好像沒有人注意到,就是當頁面載入完後,在頁面的底部會出現這些選項,這次重新操刀,不再是對原插件的修修補補,自己重新寫了code。

特點:


  • 僅IE有效,FF下保持原狀
  • 不接受鍵盤響應,所以上下鍵無效,滾軸也無效
  • 其他的應該都模仿的差不多了



由於前台編程也只是我的業余愛好,所以更加細致的模仿,只能靠大家了。

其實我自己也覺得寫這麼一堆未必有用,但是既然都寫出來了,還是放上來吧,有用沒用讓大家來評價。

浏覽地址:http://www.live-my-life-with-yuyi.com/lab/jquery/form_select/

代碼:

以下是引用片段:
if($.browser.msIE)
$(document).ready(function(){
    //對每一個select進行美化
    $("select").each(function(){
        select_name = $(this).attr("name");
        //取得select的高度
        width = $(this).width();
        //取得input的寬度
        input_width = width-17;
        //取得絕對坐標
        offset = $(this).offset();
        //美化的代碼
        select_Html = ’<div style="width:’+width+’px;position:absolute;left:’+offset.left+’px;top:’+offset.top+’px"><input type="text" style="width:’+input_width+’px;" autocomlete="off" readonly="true" id="input_’+select_name+’" class="select_input"/><img id="img_’+select_name+’" name="’+select_name+’" class="select_img" src="s.gif" width="17" height="21"></div>’;
        //附加到頁面上
        $("body").append(select_Html);
        $(this).CSS({visibility:"hidden"});
        //$(this).CSS("margin","200px");
        //取得option的數量
        option_num = $("option",$(this)).length;
        //option的高度
        option_height = option_num * 21 > 200 ? 200 : option_num*21;
        //option的寬度
        option_width = width;
        //option的坐標
        option_left = offset.left;
        option_top = offset.top+21;
        //下拉菜單的美化代碼
        option_Html = "<div class=’select_option_div’ id=option_"+select_name+" style=’height:"+option_height+"px;width:"+option_width+"px;position:absolute;top:"+option_top+"px;left:"+option_left+"px;overflow:auto’>";
        $(this).find("option").each(function(){
            option_Html += "<div class=’select_option’>"+$(this).text()+"</div>";
        });
        option_Html += "</div>";
        //附加到頁面上
        $("body").append(option_Html);
        //隱藏選項
        $("#option_"+select_name).hide();
        //設定img id 和 input id
        img_id = "#img_"+select_name;
        input_id = "#input_"+select_name;
        //設定圖片點擊事件
        $(img_id).click(function(){
            //通過name取得目標id
            dest_id = "#option_"+$(this).attr("name");
            //取得選項的狀態是打開還是關閉
            state = $(dest_id).CSS("display");
            //關閉所有的選項
            $(".select_option_div").hide();
            //開的關,關的開
            if(state == "none"){
                $(dest_id).show();
            }
            else{
                $(dest_id).hide();
            }
        });
        //input的點擊事件
        $(input_id).click(function(){
            //取得目標id
            dest_id = $(this).attr("id").substr(6);
            dest_id = "#option_"+dest_id;
            state = $(dest_id).CSS("display");
            $(".select_option_div").hide();
            if(state == "none"){
                $(dest_id).show();
                //alert("hello");
            }
            else{
                $(dest_id).hide();
            }
        });
        //設置默認選中的項
        obj = document.getElementById(select_name);
        input_id = "#input_"+select_name;
        $(input_id).val(obj.options[obj.selectedIndex].text);
    });
    //當點擊選項後的操作
    $(".select_option").click(function(){
        //取得select id
        parent_id = $(this).parent().attr("id");
        parent_id = parent_id.substr(7);
        input_id = "#input_"+parent_id;
        //在input處顯示所選項
        $(input_id).val($(this).text());
        //操作select選項
        obj = document.getElementById(parent_id);
        obj.options[obj.selectedIndex].text=$(this).text();
        option_id = "#option_"+parent_id;
        //選中之後隱藏選項
        $(option_id).hide();
    });
    //對option選項應用鼠標移入移出效果
    $(".select_option").hover(function(){$(this).addClass("select_highlight")},function(){$(this).removeClass("select_highlight")});
});
//點擊頁面函數
$(document).click(function(evt){
    var evt = evt || window.event; // event object
    var target = evt.target || window.event.srcElement; // event target
    var t_className = target.className; // event target id
    if(t_className == "select_img" || t_className == "select_input" || t_className == "select_option"){
        return false;
    }
    else{
    $(".select_option_div").hide();
    };
});

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved