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がnullであると言っています。渡されたオブジェクトには、速度プロパティがある場合とない場合があります。だから私の推測では、それが存在しない場合、IEでnullとして認識されます。これを回避する方法はありますか。毎回オブジェクトに速度プロパティを追加する必要はありません。

speed = a.speed と言って考えました ? a.速度: 600; a.speed が存在しない場合は、600 に設定されます。

アップデート:

setTimout と関係があるのではないかと思います。2 つのページの唯一の違いは、関数が同時に 3 回呼び出されることです。それが機能するページでは、animateTo 関数の呼び出しが間隔を空けて表示されます。次々と呼び出すと、速度がnullになるか、IEだけのオブジェクトではないようです。

また、setTimout 内で変数を移動しても、そのエラーは発生しませんでした。しかし、私は setTimout 関数の外に del 変数を残す必要があり、そうするとエラー del is null or not and object in IE が表示されます。

最初の呼び出しでは setTimout が機能し、a.speed を読み取ることができるように見えますが、最初の setTimeout がまだ周りにないローカル変数を見つけようとしているため、2 番目の呼び出し a.speed は null です。少なくともそれが私の理論です。誰もがこれに関するアイデアを持っています。

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

あなたは正しい考えを持っていますが、あなたの三元演算子が問題だと思います。一連の括弧で修正する必要があります。

あなたの三元は次のように評価されています

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

それ以外の

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