Javascript转换字符串作为函数调用

时间:2013-09-23 09:08:27

标签: javascript jquery

我有以下场景,我需要根据html元素的数据属性调用函数。

function func1(arg1){
    alert("func1");
}

function func2(arg2){
    alert("func2");
}

jQuery(document).on('click', '.func-class', function(){
  var funcName = jQuery(this).data('func-name');
  var funcArg = jQuery(this).data('func-arg');      
  //Need to call funcName(funcArg) here
});

HTML:

<div data-func-name="func1" data-func-arg="arg1" class="func-class">Func1</div>
<div data-func-name="func2" data-func-arg="arg2" class="func-class">Func2</div>

JSFiddle相同: http://jsfiddle.net/E4HeT/

3 个答案:

答案 0 :(得分:4)

如果在全局范围内定义了这些函数,则可以执行以下操作:

window[funcName](funcArg);

否则,我建议将它们放在像这样的对象中:

var functions = {
    "func1":func1,
    "func2":func2
};
functions[funcName](funcArg);

第二个实际上更安全,因为它有助于防止任意代码执行。

答案 1 :(得分:0)

您可以执行以下this

window[funcName](funcArg)

但是你必须通过在对象中设置它来获得函数的引用(就像我在window对象中所做的那样),因为它在jQuery.ready函数中是私有的

答案 2 :(得分:0)

$('.func-class').click(function(){

    var toCallArg = $(this).data('func-arg');        
    var toCall = function(toCallArg){            
        //your code
    };
    toCall(toCallArg);
});