我遇到了一个奇怪的错误,在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。我已更新代码以反映这一点。有人知道任何解决方法吗?
答案 0 :(得分:6)
看来我第一次尝试读取element.style.left时,IE实际上是在回馈NaN。
第一次阅读element.style.left
时,元素上是否设置了left
样式?请注意,element.style
仅反映内联style="..."
属性中设置的样式属性,而不反映样式表应用的样式属性。
如果您尚未设置内联样式,style.left
将为您提供undefined
对象,该对象确实parseInt
为NaN。
答案 1 :(得分:2)
向下滚动到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';
}
您明白了。输入您的逻辑。