-1

我正在编码为表单制作简单的验证器。

为了动态验证表单,我计划使用 eval 函数。

正如您在 javascript 编码中看到的,var funcCall 成为带有 jquery selected dom 参数的函数名称。

但这会出错。(未捕获的 SyntaxError:意外的标识符)

我想知道的是我应该只在 eval() 中使用 String 还是有更好的方法来做到这一点?


var Submit = {
    validateFilters : ["Submit.emptyCheckFilter"], // This is validator filters
    emptyCheckFilter : function(element) 
        //this is filter to validate if it's empty or not.
        console.log("this has been called");
    },
    doValidate : function(form) {
        var children = $(form).children();
        var filters = Submit.validateFilters;

        $.each(children, function(key, value) { // Loop over form element

            for(var i = 0; i < filters.length; i++) {
                //Here's error comes the value is not String. it's selected item by jQuery.
                //Uncaught SyntaxError: Unexpected identifier <= This occurs.
                var funcCall = filters[i] + "(" + value + ");";

                // Call the filter
                eval(funcCall);
            }

            return false; 
        });
    },
   ...
}
4

3 回答 3

2

您不应该为此使用 eval。直接使用函数实例而不是它们的“名称”要简单得多。

var Submit = {
    validateFilters : [function(element) {
        //this is filter to validate if it's empty or not.
        console.log("this has been called");
    }], // This is validator filters
    doValidate : function(form) {
        var children = $(form).children();
        var filters = Submit.validateFilters;

        $.each(children, function(key, value) { // Loop over form element

            for(var i = 0; i < filters.length; i++) {
                filters[i](value);
            }

            return false; 
        });
    },
   ...
}
于 2012-08-07T07:58:18.370 回答
1

当您可以使用函数指针时,您不应该使用 eval:

function emptyCheckFilter(x){}

// array contains the functions, not just their names

var filters = [emptyCheckFilter];  

for(var i = 0; i < filters.length; i++) {
    // call the functions, without using eval
    filters[i](value);
}
于 2012-08-07T07:58:03.270 回答
0

正如你的问题“eval()中使用的参数应该是字符串吗?”;

句法

评估(字符串

参数

细绳

表示 JavaScript 表达式、语句或语句序列的字符串。表达式可以包括现有对象的变量和属性。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/eval

于 2012-08-07T08:21:54.460 回答