如何:使用数据属性进行条件验证

时间:2017-06-13 18:48:35

标签: jquery attributes jquery-validate

使用jQuery Validate,我正在对selecttext字段进行条件验证:如果有特定选项({{1},则必须填写文本字段(#specialization)从选择字段(<option value="doctor">

中选择了}

到目前为止一切顺利,这是一份工作副本:https://jsfiddle.net/vzx9paxz/2/

现在,我不喜欢搞乱太多的JS代码,我想利用#job属性。所以,我想直接在HTML代码中评估表达式data-rule-required,将其从Javascript中删除:如果它返回($('#job').val() === 'doctor'),则必须填写true字段,否则它可以是空的

这样的事情:

#specialization

当然这段代码不起作用:我尝试了其他表达式,比如<input type="text" data-rule-required="return ($('#job').val() === 'doctor')" class="form-control" id="specialization" name="specialization"> ,但没有运气......

3 个答案:

答案 0 :(得分:1)

  

如何:使用数据属性进行条件验证

你不能。

data-rule-required="return ($('#job').val() === 'doctor')"

即使您可以在data属性中执行JavaScript,也不能执行 the jQuery Validate plugin cannot interpret it (see the JS errors in the console)。通常,它会在true中查找falsedata-rule-required字符串...但它无法执行条件表达式。

换句话说,无论你将data-rule-required的值放在什么位置,jQuery Validate插件都会将其解释为字符串并阻塞除"true""false"以外的任何内容。

答案 1 :(得分:0)

数据属性无法触发事件。 更好地编写一个javascript函数,并通过单击,焦点,调整大小,鼠标...事件来调用它。像:

 <input class="user" name="">

 <script>
  $(".user").focus(function(){
 if($(this).val()=="doctor"){
 // do what ever
  }
  });

答案 2 :(得分:0)

OP提出的要求通常是不可能的。但是,在某些简单情况下,可以仅使用数据属性进行条件验证。这是一个示例:

<form action="#" method="post">
    <label for="password">Set new password</label>
    <input type="password" id="password" name="password">
    <br>
    <label for="password-confirm">Confirm password</label>
    <input type="password" id="password-confirm"
        data-rule-equalto="#password"
        data-rule-required="#password:filled">
    <br>
    <input type="submit" value="save">
</form>

实时观看:JSFiddle

它将不需要任何一个密码字段,除非第一个字段为非空白,否则将需要第二个字段。感谢extra selectors provided by jQuery Validate

其他有用的选择器::checked:unchecked:blank