我遇到了一个问题,其他页面上的相同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仍在尝试查找不在的本地变量。至少这是我的理论。任何人都有这个想法。
答案 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"