2011-05-17 82 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> 
相关问题