【问题标题】:How to evaluate a full function string (including params) in javascript如何在 javascript 中评估完整的函数字符串(包括参数)
【发布时间】:2011-10-23 22:01:59
【问题描述】:

我有一个选择(下拉列表),其中包含与操作相对应的选项。每个动作对应一个通用的 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)。

我在 select 的 change 事件上有一个 jquery 侦听器,我想在选项的值字符串中调用 javascript 函数。

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

});

似乎每个人都讨厌 eval() 。 . .但这是一个合适的案例,还是我应该做其他事情?我看了这个How to turn a String into a javascript function call?。 . .但是在那个中,您只有名称要处理,而不是完整的函数调用字符串,包括参数。

我这样做的原因是因为我正在为我们应用程序的某些类型的视图创建一个通用框架,并且操作可能不同(并且具有不同的 url 和/或调用不同的 javascript 函数)每一页。

谢谢!

【问题讨论】:

    标签: javascript introspection dynamic-function


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-11
        • 1970-01-01
        • 1970-01-01
        • 2012-05-07
        • 1970-01-01
        • 2021-05-21
        相关资源
        最近更新 更多