2012-01-18 8 views
3

私はhtml5データ文字のいくつかを使用していて、特定のdivタグに対して何かが完了したときに呼び出す関数を知りたいとします。JavaScriptが機能する文字列

ので、私のデータは、私が呼び出したい関数にそのコールバック(文字列)に変換する方法を

data-callback='jsAPI.aSubset.desiredFunction' 

ようになります。簡単なグローバルな

data-callback='_myfunction' 

<script> 
    function _myfunction() { alert("yes my function"); } 
    $("div").click(function() { 
     var fn = $(this).data("callback"); 
     if (typeof fn === 'function') { 
      fn(); 
     } 
    }) 
</script> 

としての機能が、どのように私は、以前の1つのjsAPI.aSubset.desiredFunctionおかげ

答えて

2

にのみ機能します。

代わりにこれを試してみてください:

var elms = fn.split("."); 
var curr = window; 
var nxt; 
while(nxt = elms.shift()) curr = curr[nxt]; 
curr(); 
0

でそれを行うのですか関数がグローバルスコープで定義されている場合window[fn]()をお試しください。

1

利用角括弧...あなたは何.チェーンを持っていない場合は

jsAPI.aSubset[fn](); 

はそう...角括弧を使用して

if (typeof jsAPI.aSubset[fn] === 'function') { 
    jsAPI.aSubset[fn](); 
} 
+0

私はそのアイテムが文字列だと言っています...文字列内の関数を呼び出すだけで、私は魔法のように何を呼び出すべきかを知ることができます。 – Michael

+0

'data-callback'属性に必要な/望むのは実際の関数名' desiredFunction'だけです。あらかじめネストしているオブジェクトを知ることができない場合は、[@ Kolinkの解答](http://stackoverflow.com/a/8918903/1106925)のようなものが必要です。 –

+0

@Michael:どのサブセットが使用されるのかを事前に知っているのはなぜ魔法でしょうか? –

4

は恐ろしいeval()のための偉大なユースケースのような音。あなただけのFunction("functionstring")を使用する場合があります

var fnString = "jsAPI.aSubset.desiredFunction"; 
var fn = eval(fnString); 
if (typeof(fn) === "function") { 
    fn.apply(); 
1

私のような何かをするだろう。 Function関数は文字列から関数を返します。

関連する問題