IE中的null对象

时间:2012-11-07 20:04:05

标签: jquery

我遇到了一个问题,其他页面上的相同javascript工作正常,但由于某种原因,在这个特定的页面上,它使用完全相同的代码抛出错误。

我有一个更新的函数,并传递了要更新的属性对象。

function animateTo(a,t){
    var speed,easing,del,cb;
    speed = a.speed ? a.speed : 600;
    del = a.del ? a.del : 0;
    setTimeout(function() {
    t.stop(true).animate( { left:a.x, top:a.y, opacity:a.opacity }, { duration: speed, easing: easeOutExpo });
    }, del);

}

在IE中,它说a.speed为null。传递的对象有时具有速度属性,有时不具有。所以我的猜测是当它不存在时它在IE中被识别为null。他们是解决这个问题的方法吗?无需每次都将速度属性添加到对象。

我想说speed = a.speed? a.speed:600; 如果a.speed不存在,它会将其设置为600。

更新:

我认为它可能与setTimout有关。 两个页面之间的唯一区别是同时调用3次函数。在它工作的页面上,调用animateTo函数是间隔开的。似乎当我一个接一个地调用它时,我得到的速度是null,或者只是IE中的对象。

当我在setTimout中移动变量时,我没有得到那个错误。但是我必须将del变量保留在setTimout函数之外,当我这样做时,我得到一个错误del is null或者不是IE中的对象。

在第一次调用时,似乎setTimout工作并且能够读取a.speed,但第二次调用a.speed为null,因为第一个setTimeout仍在尝试查找不在的本地变量。至少这是我的理论。任何人都有这个想法。

2 个答案:

答案 0 :(得分:0)

你有正确的想法,但我认为你的三元运算符是问题所在。一组括号应该修复它。

您的作品正在评估为

(speed = a.speed) ? a.speed : 600;

而不是

speed = (a.speed ? a.speed : 600);

答案 1 :(得分:0)

尝试使用逻辑OR:

speed = a.speed || 600;

来自here

var whatIWant = null || new ShinyObject(); // is a new shiny object
var whatIWant = undefined || "well defined"; // is "well defined"
var whatIWant = 0 || 42; // is 42
var whatIWant = "" || "a million bucks"; // is "a million bucks"
var whatIWant = "false" || "no way"; // is "false"