我在JavaScript中遇到以下情况:
<a onclick="handleClick(this, {onSuccess : 'function() { alert(\'test\') }'});">Click</a>
handleClick
函数接收第二个参数作为对象,其中onSuccess
属性包含函数定义...
如何调用onSuccess
函数(存储为字符串) - 并将otherObject
传递给该函数? (jQuery解决方案也很好......)?
这是我到目前为止所尝试过的......
function handleClick(element, options, otherObject) {
options.onSuccess = 'function() {alert(\'test\')}';
options.onSuccess(otherObject); //DOES NOT WORK
eval(options.onSuccess)(otherObject); //DOES NOT WORK
}
答案 0 :(得分:6)
你真的不需要这样做。我的意思是将函数作为字符串传递。 JavaScript函数是第一类对象,可以直接传递:
<a onclick="handleClick(this, {onSuccess : function(obj) { alert(obj) }}, 'test');">
Click
</a>
...
function handleClick(element, options, otherObject) {
options.onSuccess(otherObject); // works...
}
但如果真的希望按照自己的方式行事,那么cloudhead's solution就可以了。
答案 1 :(得分:1)
试试这个:
options.onSuccess = eval('function() {alert(\'test\')}');
options.onSuccess(otherObject);
答案 2 :(得分:0)
当我在虚拟变量中添加一个赋值时,它只适用于我的FF:
options.onSuccess = 'dummyVariable = function(x) {alert("x=" + x);}';
f = eval(options.onSuccess);
f(5);