预编译javascript中的验证器函数

Precompiling a validator function in javascript

本文关键字:验证 函数 编译 javascript      更新时间:2023-09-26

我正在编写一个自定义验证器包。其中一个要求是能够提供一个函数来运行控制值(例如检查两个密码是否匹配)。我希望能够做这样的事情:

<input data-validator-func="validFn" .../>

当输入被改变时,用输入的文本作为参数调用这个函数。我想让它运行得尽可能快,所以我想这样做:

fn = eval("function(val) { " + $(elem).attr('data-validator-func') + "(val);}");

这个想法是预编译一个函数调用,然后简单地做:

valid = fn($(elem).val());

然而,当我尝试这个firefox抛出一个异常在初始eval "SyntaxError: function statement requires a name"。

我不知道这里出了什么问题。有人能帮忙吗?

用parent括起来就行了

eval("( function(){} )");

指定你的代码

fn = eval("(function(val) { " + $(elem).attr('data-validator-func') + "(val);})");

尝试:

var code = $(elem).attr('data-validator-func');
var fn = new Function('val', code).bind(elem);

这比eval更可靠,因为它不能将任何东西绑定到局部变量,而且它涉及的字符串操作更少。另外,bind表示用户可以在函数中使用this,它将引用该元素。

当然,更好的方法可能是不把JavaScript放在HTML属性中,但我不知道这里的全部情况