Как оценить строку полной функции (включая параметры) в JavaScript - PullRequest
0 голосов
/ 10 августа 2011

У меня есть выбор (выпадающий список) с параметрами, которые соответствуют действиям.Каждое действие соответствует общей функции JavaScript, которая должна вызываться в измененном событии для выбора.Вот так это выглядит так:

<select id="id-select-action" class="select-action right" value="Actions">
            <option class="select-title">Actions</option>
            <optgroup label="General Actions">
                <option value="load_new_page('/url/to/new/page')">create a foo</option>
                <option value="load_cbox('/url/to/cbox/contents')">manage tags</option>
            </optgroup>
</select>

Мой серверный код динамически генерирует строки значений каждого параметра (которые являются вызовами функций javascript, в зависимости от того, что действие выполняет и как оно отображается), а также сервер динамическигенерирует параметры (URL-адреса для представлений).

У меня есть прослушиватель jquery для события изменения для выбора, который я хочу вызвать функцией javascript в строке значения в опции.

$("#id-select-action").change(function() {
    function_call = $("#id-select-action option:selected").val();
    //How do I execute the function_call?

});

Кажется, все ненавидят eval ().,,но это подходящий случай для этого, или я должен делать что-то еще?Я посмотрел на это Как превратить строку в вызов функции JavaScript? .,,но в этом у вас есть только имя, с которым нужно иметь дело, а не полная строка вызова функции, включая параметры.

Причина, по которой я это делаю, заключается в том, что я создаю общую структуру длянекоторые типы представлений нашего приложения, и действия могут быть разными (и иметь разные URL и / или вызывать разные функции javascript) для каждой страницы.

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Я думаю, что Eval поможет .. в состоянии.

http://www.w3schools.com/jsref/jsref_eval.asp

Но, пожалуйста, будьте осторожны с использованием eval и проверьте, подходит ли он для вашего случая.

0 голосов
/ 10 августа 2011

Используйте этот fn для создания fn из строки

 function createFunctionFromString(fnName, noOfParameters) {
        var _params = [];
        for (i = 0; i < noOfParameters; i = i + 1) {
            _params.push("p" + (i + 1));
        }
        var _fn = fnName ? new Function(_params.toString(","), "return " + fnName + "(" + _params.toString(",") + ");") : null;
        _params.length = 0;
        return _fn;
    }

// Теперь используйте выше fn в вашем событии изменения

var convertedFn=createFunctionFromString($("#id-select-action option:selected").val(),'SomeInteger');


convertedFn();

http://jsfiddle.net/praveen_prasad/fk8fh/

...