2012-01-18 47 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> 

但我如何與前一個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 2012-01-18 23:18:45

+0

我應該澄清一下,你在'data-callback'屬性中需要/想要的是實際函數名'desiredFunction'。如果你事先不知道對象嵌套,那麼你會想要[@ Kolink's answer](http://stackoverflow.com/a/8918903/1106925)。 – 2012-01-18 23:19:24

+0

@Michael:爲什麼事先知道使用哪個子集會是神奇的? – 2012-01-18 23:21:08

4

聽起來像一個偉大的使用情況進行了可怕的eval()

我會做這樣的事情:

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

您可能希望只使用Function("functionstring")。函數函數從字符串中返回一個函數。