在開發中,遇到這樣一個需求情況,因此記錄下來以備用
需求背景 在頁面上使用快捷鍵盤快捷定位到支付方式選擇框(一個下拉列表)並進行選擇。
技術難點 目前浏覽器並不支持通過代碼定位下拉列表時就列出其下所有選項,只能通過鼠標點擊。
在網上找了些資料後,得出目前比較好的處理方式;
利用select的size屬性,配合盒子布局的position屬性來實現,具體代碼如下:
復制代碼代碼如下:
<td align="right">
支付方式:
</td>
<td style="padding:0px;vertical-align:top;">
<!-- 這裡必須用div包著select,否則在ff下不兼容 -->
<span style="color:#ff0000"><div style="position:relative;padding:1px;">
</span> <select id="payType" name="payType" style="position:absolute;" onfocus="expand(this)" onblur="unexpand(this)">
<option>人民幣</option>
<option>美元</option>
<option>信用卡</option>
<option>港幣</option>
<option>港幣</option>
</select>
<span style="color:#ff0000"></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的回答