使select在選中/聚焦時列出所有選項目前比較好的處理方式

字號:


    在頁面上使用快捷鍵盤快捷定位到支付方式選擇框(一個下拉列表)并進行選擇,在網上找了些資料后,得出目前比較好的處理方式在此與大家分享下,希望對大家有所幫助
    在開發(fā)中,遇到這樣一個需求情況,因此記錄下來以備用
    需求背景
    在頁面上使用快捷鍵盤快捷定位到支付方式選擇框(一個下拉列表)并進行選擇。
    技術難點
    目前瀏覽器并不支持通過代碼定位下拉列表時就列出其下所有選項,只能通過鼠標點擊。
    在網上找了些資料后,得出目前比較好的處理方式;
    利用select的size屬性,配合盒子布局的position屬性來實現(xiàn),具體代碼如下:
    代碼如下:
    <td>
    支付方式:
    </td>
    <td>
    <!-- 這里必須用div包著select,否則在ff下不兼容 -->
    <span><div>
    </span> <select id="payType" name="payType" onfocus="expand(this)" onblur="unexpand(this)">
    <option>人民幣</option>
    <option>美元</option>
    <option>信用卡</option>
    <option>港幣</option>
    <option>港幣</option>
    </select>
    <span></div>
    </span></td>
    expand和unexpand方法都很簡單:
    代碼如下:
    function expand(obj){
    $(obj).attr("size","10");
    }
    function unexpand(obj){
    $(obj).attr("size","1");
    }
    把select的position設置為absolute,使其不影響dom的流布局。再把其容器的position設置為relative,使select根據其容器來定位。
    這里需要注意的是在table元素中必須使用div作為select的容器,因為根據w3c的css標準,在table相關元素設置position:relative是未定義的,所以在ff下select元素會直接根據body元素來定位。
    參考的資料:
    http://www.php-insite.com/autoexpand_select.html 直接查看頁面源代碼
    http://bbs.csdn.net/topics/330158935 留意lingshuo1993的回答