在jquery中将变量作为函数调用

时间:2013-11-29 07:19:39

标签: javascript jquery

就像在PHP中我需要一个变量变量。

我从html获取数据类型,该变量实际上是js代码中的一个函数。

我明白了,我需要打电话给它。 每次都不同,所以我不知道究竟是哪一个。

if (e.which == 114 || e.which == 116) {
    var action = $('.active').data("action");    
    action();
}

function testing() {
    alert('yes');
} 

这里函数名称正在测试。变量动作正在持有它。 我怎么称呼它? 我记得有一个简单的语法,但我找不到它。 感谢

2 个答案:

答案 0 :(得分:0)

它取决于保存该功能的对象。对于全局范围使用:window[action]()。否则,请将window替换为您的对象名称:myObject[action]()。但是,此解决方案不适用于在私有范围内声明的函数:

function f(fnName) {
    function a() { alert('a') };
    function b() { alert('b') };
    fnName(); // error
}

在这种情况下,你可以像这样使用eval(⚠保持对输入的控制:):

function f(fnName) {
    function a() { alert('a') };
    function b() { alert('b') };
    eval(fnName)();
}

否则你可以将它们包装在一个像这样的对象中:

function f(fnName) {
    var wrapper = {};
    wrapper.a = function () { alert('a') };
    wrapper.b = function () { alert('b') };
    wrapper[fnName]();
}

f('a'); // alerts "a"
f('b'); // alerts "b"

答案 1 :(得分:0)

您可以提取值并使用eval()。

<div id="something" data-action="alert('test')">SOME DIV</div>

$(document).ready(function() {
    var $myObject = $("#something");
    var action = $myObject.data('action');
    $myObject.click(function() {
        eval(action);
    });    
});

Try it yourself on jsfiddle

However, eval is evil