使用字符串中的名称和参数调用JS函数

时间:2014-03-08 12:19:27

标签: javascript string function

我已经搜索了一段时间,如何从字符串调用javascript函数(函数名称及其参数存储在字符串中)。我找到了很多信息,比如不使用eval()......

我找到了解决方案,但我没有让他们工作。我做错了什么?

这是短jsfiddle here

function insertArtikel(param1, param2, param3, param4, param5, param6) {
    alert('Called successfully');
    alert('Param1: ' + param1 + ', Param2: ' + param2 + ', Param3: ' + param3 + ', Param4: ' + param4 + ', Param5: ' + param5 + ', Param6: ' + param6);
}

$('#mybutton').on('click', function () {
    todo = $('#txt1').val();
    params = $('#txt2').val();
    alert('Now calling: '+todo+'('+params+');');
    //Maybe making an array of it:
    //params = params.replace(/'/g, '');
    //params = params.split(',');
    window[todo](params);
});

它应该运行函数“insertArtikel”(textfield1)并在单击Button时给出textfield2的参数。 SHOULD ..

感谢所有回复!

编辑:感谢sabof!我没有正确地将字符串转换为数组!区别: 错误:var args = params.replace(/'/ g,'')。split(','); 右:var args = params.replace(/'/ g,'')。split(/,?/); 现在它有效!!!!!!致谢!!!

1 个答案:

答案 0 :(得分:2)

正确的答案是:

var args = params.replace(/'/g,'').split(/, ?/);
window[todo].apply(null, args);

然而它在JSFiddle中不起作用,因为JSFiddle自动包装代码,insertArtikel不是全局函数:

$(window).load(function(){
  function insertArtikel(param1, param2, param3, param4, param5, param6) {
    alert('Called successfully');
    alert('Param1: ' + param1 + ', Param2: ' + param2 + ', Param3: ' + param3 + ', Param4: ' + param4 + ', Param5: ' + param5 + ', Param6: ' + param6);
  }

  $('#mybutton').on('click', function () {
    todo = $('#txt1').val();
    params = $('#txt2').val();
    alert('Now calling: '+todo+'('+params+');');

    var args = params.replace(/'/g,'').split(/, ?/);
    window[todo].apply(null, args);
  });
});