会发生什么事资源管理器不会为选项标签触发任何事件,也不允许我们获取其坐标或尺寸,因此我认为唯一需要做的事情是欺骗浏览器:
- 获取[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