我对javascript很新,但我知道你可以调用一个函数,它由一个字符串表示,以便:
var function_to_call = window[values['function']];
//Where values['function']='functionName'
到目前为止一直很好,然后我们有:
if(typeof function_to_call == 'function'){
if(values['parameters']!= '')
function_to_call(values['parameters']);
else function_to_call();
};
当然,这不会起作用,因为参数在一个字符串中都以“parameter1,parameter2”形式出现,所以你最终得到了
function_to_call("parameter1, parameter2");
而不是
function_to_call(parameter1, parameter2);
任何想法?感谢你的时间!
EXPANDED:
传递给函数的参数表示页面中元素的“id”;所以调用的函数将尝试通过执行以下操作来获取这些元素:
document.getElementById(parameter1);
...some other things...
document.getElementById(parameter2);
答案 0 :(得分:3)
我假设参数名称也代表全局变量。
如果是这样,你可以将它们分成一个数组,然后将.map()
数组分成一个相关全局变量的新数组。
然后使用.apply()
使用参数数组调用函数。
if (typeof function_to_call == 'function') {
if(values['parameters']!= '') {
var args = values['parameters'].split(",")
.map(function(name) {
return window[name.trim()];
});
function_to_call.apply(window, args);
} else function_to_call();
}
.trim()
和.map()
方法需要一个垫片用于IE8 ......但这主要说明了如何做到这一点。作为替代方案,您可以将正则表达式传递给.split()
来处理任何空格。
var args = values['parameters'].split(/\s*,\s*/)...
答案 1 :(得分:0)
if(typeof function_to_call == 'function'){
if(values['parameters']!= '')
setTimeout('function_to_call('.values['parameters'].');');
else setTimeout('function_to_call();',0);
}