为什么element.style.left会返回NaN?

时间:2009-09-15 16:38:11

标签: javascript internet-explorer dom internet-explorer-7

我遇到了一个奇怪的错误,在Internet Explorer 7中,当我在浮点数上调用Math.round时,它会给我一个“无效参数”错误。请考虑以下事项:

var elementLeft = parseInt(element.style.left); // Here we're actually getting NaN
function Foo(x) {
  this.x = x;

  this.apply = function(element) {
    element.style.left = Math.round(this.x) + 'px';
  };
}
Foo(elementLeft);

在这种情况下,x是一个非负数,而element只是我页面中的一个DOM元素(实际上是一个div)。

有什么想法吗?

编辑:作为x参数传入的变量实际上早于parseInt(element.style.left)初始化。看来我第一次尝试阅读element.style.left时,IE实际上是在回馈NaN。我已更新代码以反映这一点。有人知道任何解决方法吗?

5 个答案:

答案 0 :(得分:6)

  

看来我第一次尝试读取element.style.left时,IE实际上是在回馈NaN。

第一次阅读element.style.left时,元素上是否设置了left样式?请注意,element.style仅反映内联style="..."属性中设置的样式属性,而不反映样式表应用的样式属性。

如果您尚未设置内联样式,style.left将为您提供undefined对象,该对象确实parseInt为NaN。

答案 1 :(得分:2)

IE是否将x默认值设为错误值?

向下滚动到this page上的第10项:

  

一切都运转良好   Firefox,谷歌Chrome等。但我是   有IE的问题(所有   口味)。没有选择工具   提出了一个javascript警告   制作告诉我的一个   提交的“无效参数”   Math.round函数。

     

原因是你第一次   点击图片开始你的   选择,scaleX和scaleY   javascript上的变量   页面结果的值为Infinity。   Firefox和其他浏览器似乎   默默地跨过这个并随身携带   处理正常。 IE当然   没有。

     

解决方案是添加以下内容   在初始scaleX和之后的行   计算scaleY变量。这个   似乎已经解决了这个问题   充分。 if(scaleX == Infinity || scaleY   ==无限)返回false;我希望这可以帮助别人并拯救他们   狩猎的时间花了我; o)

答案 2 :(得分:0)

我认为这不是Math.round()给你的错误。它可能是CSS子系统。尝试使用您获得的值alert()

答案 3 :(得分:0)

某些框架(如jQuery)具有读取计算的元素位置的工具 - 无需在其上显式设置CSS位置属性。尝试通过jQuery读取元素的位置。它可能会奏效。

答案 4 :(得分:0)

由于某些原因,JavaScript仅适用于内联样式。 例如

<div style="left:500px;"></div>

如果您希望处理元素的位置,请尝试在Java脚本文件中设置初始位置,例如:

function Xyz() {
    var elem = document.getElementById('id');
    elem.style.left = 500px;
    numberLeft = 500;
    //Now you can manipulate the position
    var increment= 50;
    var newLeft = numberLeft + increment;
    elem.style.left = newLeft + 'px';
}

您明白了。输入您的逻辑。

相关问题