0

我使用 jQuery 构建了一个网站控件,它是一个包含四个彩色 div 的长条;用户可以在整个栏的范围内拖动两个 div 之间的连接来调整它的大小(整个栏的宽度不会改变)。此外,用户可以删除/替换任何 div,但必须保留在那里。

在我的电脑上调试时,它运行良好。现在我将它托管并发现 jQuery 报告的一些值不一致 - 特别element.css('left')element.width(). 当我设置要输出到控制台的值并反复刷新页面时,我看到有时left从没有设置它的元素读取返回 NaN,有时返回 0。我通过检查它并明确地克服了这个问题它0。

另一种是width。我有一个包裹内部 div 的 div,它决定了滑块的固定宽度——目前设置为 1000px。这是在js 文件链接的 css 样式表中设置的。在页面加载代码(in $(function(){}))中查询这个宽度值,有时会报告1000px,但有时会报告1887px??这似乎没有押韵或理由 - 我的假设是这是一个竞争条件,在渲染引擎设置宽度之前读取宽度?有人可以确认/否认这一点,或者指出我在 DOM 中提供对象/属性的顺序摘要吗?我曾认为通过将代码放入 $(function()) 文档将全部加载...

您可以在此处查看小部件

PS:如果有人想要小部件代码的副本在其他地方使用,请告诉我,很乐意提供:-)

编辑:如果您单击以拖动并滚动鼠标滚轮,则有一个附加功能,它会向上和向下轻推障碍物,以进行精细控制。我刚刚发现它不会报告正确的数字,而是不会移动,只会显示 NaN。在我的本地网络上,这工作正常(与托管的文件相同,但通过网络而不是互联网提供服务)。出于某种原因,解析值的行只返回 NaN:parseFloat($('#ICDM').children('.slider').children('.b1').attr('data-high'))

我无法理解为什么它会在网络上解析它而不是通过互联网!有没有人有解决方案或替代方案?

4

2 回答 2

1

我认为您将 css 属性和 DOM 对象属性混合在一起。" " 没有 CSS 值left并不意味着 box 元素没有 " left" 属性。换句话说:

给定:

<div>Auto Box</div>

CSS property "left": undefined (or NaN if you parse it)

Box property "div.left": some value according to layout and position on screen.

与宽度,高度等相同。

将css属性“ left”设置为一个值将强制该位置,实际上您将不再拥有该位置NaN,但这并不一定意味着元素实际上将位于“那个位置”,因为这取决于cssposition属性值,等等等等……

于 2013-07-13T02:49:39.610 回答
0

好的,我找到了我的问题的部分答案:

宽度不一致

我发现在$(document).ready()函数期间将 div 宽度打印到控制台会报告不正确的宽度(有时),但计时器上的函数总是正确报告 - 所以这毕竟是一个竞争条件!将初始绘图功能放入内部$(window).load()通过延迟直到所有内容都已加载并初始渲染(我认为!)来解决问题。

如果/当我解决其他问题时,我会更新更多细节!

于 2013-07-13T10:58:28.830 回答