2016-04-04 9 views
0

私はjquery .data()を使用してhtmlデータを取得し、関数名として分割しますが、名前は関数ではなく文字列で、文字列名を使用して一致関数を実行します。一致する関数を実行するための名前としてデータ値を使用

このデモでは、文字列名がスケールとscaleYで、どのようにscaleとscaleY関数を使用するのですか? ありがとう!

このようなエラー:

for (var i = 0; i < useData.length; i++) { 
    var funName = useData[i], 
    var excFun = new Function(funName); 
    excFun(); 
    console.log(useData[i]);      
} 

//////////////////////////////// //////////////////////////

<section class="boxed"> 
    <div class="tweenItems"> 
    <h3 data-tween="scale scaleY"> test scale</h3> 
    <h3 data-tween="scale scaleY"> test scale</h3> 
    <h3 data-tween="scale scaleY"> test scale</h3> 
    <h3 data-tween="scale scaleY"> test scale</h3> 
    <h3 data-tween="scale scaleY"> test scale</h3> 
    </div> 
</section> 

var scale = function(dir) { 
 
    TweenMax.set(tweenItem, {opacity:1}); 
 
    TweenMax.staggerFrom(tweenItem, 0.8, { 
 
    "opacity":1, 
 
    scale:0 * dir, 
 
    delay:0.8 
 
    }, 0.1); 
 
} 
 

 
var scaleY = function(dir) { 
 
    TweenMax.set(tweenItem, {opacity:1}); 
 
    TweenMax.staggerFrom(tweenItem, 0.8, { 
 
    "opacity":1, 
 
    scaleY:0 * dir, 
 
    delay:0.8 
 
    }, 0.1); 
 
} 
 

 
var tweenData = tweenItem.data("tween"); \t \t \t \t \t 
 

 
var useData = tweenData.split(" "); 
 
console.log(useData.length); 
 

 

 
for (var i = 0; i < useData.length; i++) { 
 

 

 
    var funName = useData[i], 
 
    var excFun = new Function(funName); 
 
    excFun(); 
 

 
    console.log(useData[i]); \t \t \t \t \t \t 
 
}

+0

申し訳ありませんが、エラーは次のとおりです。

代わり

のあなたがforループ全体を取り除くことができます

eval(funName + '()'); 

var excFun = new Function(funName); 

をしてみてください? – WhoAmI

+0

このようなエラー: for(var i = 0; i

+0

私はデータスケールを取得し、スケールは実行できませんfunciong –

答えて

0

はい私は1つのエラーを修正

for (var i = 0; i < useData.length; i++) { 
var funName = useData[i]; 
var excFun = new Function(funName); 
excFun(); 
} 

しかし、コンソールが私に与えて、この:

キャッチされないにReferenceError:スケールが定義されていないスケールは おかげ++

0
を定義し、自分のコード修正どのようにしない理由

関数hoistingとeval()の2つが考えられます。

スケールは関数の巻き上げのために定義されていない可能性があります(スケーリングは実行時に実行される関数ではなく、実行時に変数として定義されます)。これが問題の場合は、関数を再定義することでこれを修正できます。

例:

var scale = function(dir) { ... } 

は、私は奇妙見つけ、他のものは、あなたがの名前の文字列で関数への参照を(作成するために、Functionコンストラクタを使用しているということでした

function scale(dir) { ... } 

なり関数)。私はevalを試してみることをお勧めします。おそらく安全のためにtry-catchで包まれています。

例:

useData.forEach(function(fnName) { eval(fnName + '()'); }); 
+0

Rob Branderさん、ありがとうございました –

+0

を実行しましたが、forループ評価で一度だけ実行 –

+0

グローバル変数tweenItemに問題がある可能性があります。その変数に文脈がないので、私はそれを手助けすることができません。 –

関連する問題