0

我有一个选择(下拉列表),其中包含与操作相对应的选项。每个动作对应一个通用的 javascript 函数,该函数应该在 select 的更改事件上调用。所以它看起来像这样:

<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 函数) .

谢谢!

4

2 回答 2

1

我认为 eval 会有所帮助..在这种情况下。

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

但是请小心使用 eval 并检查条件是否适合您的情况。

于 2011-08-10T09:20:51.677 回答
0

使用这个 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/

于 2011-08-10T09:20:36.683 回答