outerWidth(true)连续两次返回不同的值,而不重新加载页面

时间:2012-07-04 23:35:40

标签: javascript jquery html css

我很困惑。

http://jsfiddle.net/pyn8s/

单击“登录”按钮。 等待弹出窗口出现。 注意它的位置。 再次单击“登录”按钮。 观察它向左移动。 (正确的位置) 再次单击“登录”按钮。 请注意,它不再移动了。

我很遗憾,我不确定如何描述这种奇怪的行为。我注意到note.outerWidth(true)上的警告它在前两次登录点击时报告了不同的宽度,但是对象永远不可见,并且它的宽度应该在调用outerWidth之前设置...

1 个答案:

答案 0 :(得分:3)

当jQuery第一次计算note.outerWidth()时,它获得其父宽度(loginForm = 250px ),因为未在css中定义注释的宽度(仅定义了max-width)。

浏览器在.append()之后呈现新的音符内容,但其新宽度是在.offset()之后计算的:

请参阅控制台日志:http://jsfiddle.net/HighKickX/QSsV6/

max-width + 2 * (padding + border-width)

= 300px + 2 *(5px + 1px)= 312px

再次单击时,将根据312px而不是250px计算偏移量。这就是为什么音符会移到另一个位置。

解决方案1 ​​:删除'position:absolute'http://jsfiddle.net/HighKickX/wjeGF/

说明: 如果你设置position:absolute,则注释将从流中取出,并且不再从loginForm继承250px的宽度。所以它的宽度不限于250px,但最大宽度为300px +填充+边框= 312px。 如果你没有设置position:absolute,那么note的宽度将被继承,并且等于250px(所有时间)。

解决方案2 :设置默认宽度http://jsfiddle.net/HighKickX/Ex3Bp/