1

我遇到了一个问题,即另一个页面上的相同 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 是空的。传递的对象有时具有速度属性,有时没有。所以我的猜测是当它不存在时,它在 IE 中被识别为空。他们是解决这个问题的方法吗。无需每次都向对象添加速度属性。

我想通过说 speed = a.speed ?a.速度:600;如果 a.speed 不存在,它将设置为 600。

更新:

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

此外,当我在 setTimout 中移动变量时,我没有收到该错误。但是我必须将 del 变量留在 setTimout 函数之外,当我这样做时,我得到一个错误 del is null or not and object in IE。

似乎在第一次调用时 setTimout 有效并且能够读取 a.speed 但第二次调用 a.speed 为空,因为第一次 setTimeout 仍在尝试查找不存在的局部变量。至少这是我的理论。任何人对此都有任何想法。

4

2 回答 2

0

尝试使用逻辑 OR 代替:

speed = a.speed || 600;

这里

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"
于 2012-11-07T21:07:35.823 回答
0

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

您的 ternery 被评估为

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

代替

speed = (a.speed ? a.speed : 600);
于 2012-11-07T20:09:10.953 回答