Eng要求我允许他们输入特殊的验证条件,通过以下数据属性传递给我们的通用验证器:
data-clv_special_condition="$(this).val()=='X'"
在JS方面,我需要捕获该数据属性并将其插入我们的验证中,例如:
$('[data-clv_special_condition]').each(function(){
if($(this).data('clv_special_condition')){
//Do something
})
});
然而,你可以想象这样的事情是行不通的。任何人都可以提供任何解决方案,将条件从数据属性传递给JS以进行验证吗?谢谢!
答案 0 :(得分:1)
为什么不在控制器中添加一系列带有自己逻辑的条件数据属性,而不是让它们设置整个表达式?像
my_number.setResultsName('my_number')
并在您的验证器中
data-clv_equals="X" data-clv_notequals="Y" data-clv_regex="Z"
从数据角度和代码中的逻辑角度来看,它更有意义。将数据与逻辑分开,防止您必须解析表达式(具有潜在危险的后果)。
答案 1 :(得分:0)
我过去使用自己构建的自定义验证框架解决了这个问题,但我认为它不适用于您的情况。
在你的情况下,我认为一个简单的eval()
会起作用(即使不可取)?
$('[data-clv_special_condition]').each(function(){
var success = eval($(this).data('clv_special_condition'));
if (!success) {
console.log("doh!");
}
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<input data-clv_special_condition="$(this).val() == 'Yes!';" value="No!" />
&#13;
答案 2 :(得分:0)
如何在数据属性中仅保存验证器的名称,例如:
<input data-clv_special_condition="validatorOne" />
将验证登录存储在js代码中,请参阅:
var validators = {
validatorOne: function(element) { ... },
validatorTwo: function(element) { ... },
};
$('[data-clv_special_condition]').each(function(){
var validatorName = $(this).data('clv_special_condition');
if(validators[validatorName](this){
//Do something
});
});