2011-05-17 111 views
3

我有一個對象作爲data附加到DIV。我也有一個字符串,其中包含該對象的函數的名稱。在不使用eval的情況下調用函數?

function callFunction(divId, funcName, data) { 
    o = $(divId).data('myObject'); 
    // how do I call o.funcName(data) ??? 

// Somewhere else... 
callFunction('#myDivId', "myFunction", someData); 

divIdfuncName實際上是從網頁上的Java小程序,這就是爲什麼他們是字符串的到來。

+0

您必須使用eval()將字符串轉換爲對象,否則它只是一個字符串。但要注意圍繞使用eval() – cusimar9 2011-05-17 14:26:55

+1

的安全問題我想你想'o [funcName](data)'。 – pimvdb 2011-05-17 14:28:05

+0

可能重複[如何執行一個JavaScript函數,當我有它的名字作爲字符串](http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have - 將它命名爲字符串) – outis 2012-04-25 01:21:25

回答

4

假設這是一個全球性的功能:

window['foo']() 

是一樣的,以

foo() 
+1

這不是全局函數。它在懸掛DIV的物體上。見上面的'o = $(divId).data('myObject')'。 – edoloughlin 2011-05-17 14:27:15

+1

在這種情況下:'the_div ['foo']()' – Quentin 2011-05-17 14:28:11

1

上你的職責範圍取決於。它貼在窗戶上,你可以做到這一點;

<script> 
    var my_dynamic_function = function(param) { 
     alert(param); 
    }; 

    var callFunction = function(divId, funcName, data) { 
     ... 
     window[funcName]('PARAM!'); 
    }; 

    ... 

    callFunction('#myDivId', 'my_dynamic_function', data); 
</script> 
相關問題