如何通过数据属性将条件传递给JS进行验证

时间:2017-02-09 23:31:32

标签: jquery validation

Eng要求我允许他们输入特殊的验证条件,通过以下数据属性传递给我们的通用验证器:

data-clv_special_condition="$(this).val()=='X'"
在JS方面,我需要捕获该数据属性并将其插入我们的验证中,例如:

$('[data-clv_special_condition]').each(function(){
    if($(this).data('clv_special_condition')){ 
        //Do something 
    })
});

然而,你可以想象这样的事情是行不通的。任何人都可以提供任何解决方案,将条件从数据属性传递给JS以进行验证吗?谢谢!

3 个答案:

答案 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;
&#13;
&#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 
  });
});