-1

フォームの単純なバリデーターを作成するためにコーディングしています。

フォームを動的に検証するために、eval 関数を使用する予定です。

javascript コーディングでわかるように、var funcCall は、jquery で選択された dom のパラメーターを持つ関数の名前になります。

しかし、それはエラーになります。(Uncaught 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() で使用されるパラメーターは文字列にする必要がありますか?」;

構文

eval(文字列)

パラメーター

ストリング

JavaScript 式、ステートメント、または一連のステートメントを表す文字列。式には、既存のオブジェクトの変数とプロパティを含めることができます。

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

于 2012-08-07T08:21:54.460 に答える