會發生什麼事資源管理器不會爲選項標籤觸發任何事件,也不允許我們獲取其座標或尺寸,因此我認爲唯一需要做的事情是欺騙瀏覽器:
- 獲取[select]對象使用其ID。
- 接下來,獲取第一個[option]對象(出於某種原因,並非所有選擇對象的 子項都是選項...我猜有些文本是 節點,因爲我們使用了空格來縮進HTML,所以我「使用 第二子M(項[1]),以便獲得至 第一個[選項]元素的引用。
- 創建將被用來作爲隱藏畫布虛設div元素。
- 設置div到絕對位置&能見度隱藏所以不會我們 顯示並且不會影響內容
- 設置th e div的高度與[選項]標籤 字體大小樣式中指定的大小(這是一個竅門,我試圖通過它的字體大小來計算[option]元素的高度 。有時候這個 的值是以點(例如10pt)指定的,所以我創建了一個與 完全相同的高度的div,並要求瀏覽器以像素爲單位返回 高度。一旦我擁有了 [option]元素的高度,其餘的都是微不足道的。
- 從鼠標的y座標 中減去選擇最頂端的位置,併除以[option]元素的高度。這個 將給我們鼠標當前定位的元素 (鼠標頂部位置 - 選擇頂部位置從屏幕 轉換座標到選擇框座標併除以[選項]元素的高度 給我們當前[選項]
- 取當前[選項]的編號,並將其用作 selectedIndex的值。
代碼:
function ieElementFromPoint(e)
{
var select = document.getElementById("mySelect");
var options = select.childNodes;
var d = document.createElement("DIV");
d.style.position = "absolute";
d.style.visibility = "hidden";
d.style.height = options[ 1 ].currentStyle.fontSize;
document.body.appendChild(d);
select.selectedIndex = (Math.round(((e.clientY + document.body.scrollTop) - select.offsetTop)/d.offsetHeight));
}
對於瀏覽器處理的其餘部分則簡單得多:
var old = null;
function select(e)
{
if (document.all)
{
ieElementFromPoint(e);
}
else
{
var option = e.target;
if (option.tagName == "OPTION")
{
if (old != null)
{
old.selected = false;
}
old = option;
option.selected = true;
}
}
}
不要忘了給[選擇]合適的ID(ID = 「mySelect」)&也在[select]上添加onmousemove =「select(event)」。 這適用於我:鉻,火狐(3.6),資源管理器8,資源管理器6(模擬),歌劇& Safari。
記住要刪除文檔中的測試DIV當我們用它做,否則會有一堆的DOM未使用的DIV的,所以在ieElementFromPoint結束()地址:
文件。 body.removeChild(d);
希望得到這個幫助。
謝謝,但我沒有使用jQuery – 2011-12-23 22:59:26