Как я могу вызвать анонимную функцию (хранящуюся в строке) с аргументом в JavaScript? - PullRequest
1 голос
/ 12 июня 2009

У меня следующая ситуация в 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
}

Ответы [ 3 ]

6 голосов
/ 12 июня 2009

Тебе действительно не нужно этого делать. Я имею в виду передачу функции в виде строки. Функции JavaScript являются первоклассными объектами и могут передаваться напрямую:

<a onclick="handleClick(this, {onSuccess : function(obj) { alert(obj) }}, 'test');">
  Click
</a>

...

function handleClick(element, options, otherObject) {
    options.onSuccess(otherObject); // works...
}

Но если вы действительно хотите сделать это по-своему, то решение cloudhead подойдет просто отлично.

1 голос
/ 12 июня 2009

Попробуйте это:

 options.onSuccess = eval('function() {alert(\'test\')}');
 options.onSuccess(otherObject);
0 голосов
/ 12 июня 2009

Это работало только на моем FF, когда я добавил assignmnet в фиктивную переменную:

 options.onSuccess = 'dummyVariable = function(x) {alert("x=" + x);}';
 f = eval(options.onSuccess);
 f(5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...