2010-03-11 45 views
2

在某些浏览器中定位元素时出现问题。我正在使用找到的jQuery自动完成here。包含自动完成值的div应直接位于文本框下方,并完美排列。该代码将通过使用产生的左财产留下的div属性的CS $(textbox).offset();在某些浏览器中,在某些计算机上不工作的jQuery偏移量()

未包装的代码,试图解决我的问题,我得在这之后:

var a = $(textbox).offset(); 
element.css({ 
    width: typeof e.width == "string" || e.width > 0 ? e.width : $(textbox).width(), 
    top: a.top + textbox.offsetHeight, 
    left: a.left 
}).show(); 

这似乎是它应该可以工作,并且它可以在Firefox中工作。它不适用于IE8,Chrome。顶端的位置总是正确的,但有时候div离左边太远,或者离右边太远。

在不同的计算机上(全部使用Windows XP),它在IE8下工作......这怎么可能?我也在我的Mac OS 10.5上测试过它。它适用于Firefox,但不适用于Safari。

我禁用了插件,更改了屏幕分辨率,重新调整了大小的窗口......它在一些地方有时会不一致。

任何人都可以想到我失踪的东西吗?

UPDATE: 我已经重新制定我的代码使用与jQuery 1.4.2和jQuery UI 1.8rc3提供的自动完成。它仍然是坏的,同样的问题。请帮忙!

UPDATE 2: 请参阅this related question。 jQuery UI自动完成中断,因为它使用偏移量。有没有人有工作?

下面是从绊倒了UI自动完成功能的JavaScript:

.css({ top: (offset.top + this.element.height) + 'px', left: offset.left + 'px' }) 

如果改为top: '0px', left: '0px'它工作正常,但显然是定位在错误的地方。

+0

x64 vs x32渲染引擎? – 2010-03-11 16:39:42

+0

@Josh:不确定你的意思。所有电脑都有32位处理器和32位窗口xp – 2010-03-11 17:01:08

+0

这种“偏移”与“位置”的东西总是让我困惑。如果这是我的代码,我会尝试:(A)使用“position()”而不是“offset()”和(B)看看在将有问题的HTML封装在“position:relative”div时会发生什么。 – Pointy 2010-03-11 17:04:14

回答

1

我终于明白发生了什么事。我有一个CSS规则定义的车身宽度:

body { 
    width: 900px; 
} 

有一次,我把它改为width: 100%;,宽900px的DIV包围的整个页面,它的工作如预期。

它看起来像IE使用身体元素来测量offset()的顶部和左侧值,但使用窗口边缘来绝对定位项目时测量顶部和左侧距离。

我希望这个答案将节省别人我已经在这个浪费了所有的时间...

1

我遇到了类似的问题,终于发现了float属性影响relative,使得relative格设置无法在Internet稳定Explorer 8,但在Firefox中表现良好。

相关问题