9

我创建了自己的条件验证属性,通过继承RequiredAttribute并实现IClientValidatable来验证客户端和服务器上的MVC模型。这个想法是,如果我的模型的布尔属性是真的,那么另一个属性是必需的。在视图这表现为它决定一个文本框是否需要在要填充复选框如何使用不显眼的jQuery验证手动重新验证/触发验证?

这完美的作品,除了当用户执行以下操作为:

  • 检查的复选框(该字段为现在需要)。
  • 提交表单(客户端验证运行,显示错误消息)。
  • 用户取消选中框(错误消息仍然存在,字段不再需要)。

我想重新验证窗体,当复选框被选中或取消选中,或者甚至更好的只是重新验证该字段,以便错误消息不再显示。我尝试过调用jQuery validate()方法的各种组合,但似乎没有任何方法能够重新运行验证。

我使用下面的JavaScript来设置我的验证功能和相关的不显眼的适配器。

$.validator.addMethod(
    "requiredif", 
    function(value, element, parameters) { 
     var selector = "#" + parameters["dependentpropertyname"]; 
     var triggerValue = parameters["triggervalue"].toString().toLowerCase(); 
     var actualValue = $(selector).is(":checked").toString().toLowerCase(); 
     if (actualValue === triggerValue) return $.validator.methods.required.call(this, value, element, parameters); 

     return true; 
    }); 

$.validator.unobtrusive.adapters.add(
    "requiredif", 
    ["dependentpropertyname", "triggervalue"], 
    function(options) { 
     options.rules["requiredif"] = { 
      dependentpropertyname: options.params["dependentpropertyname"], 
      triggervalue: options.params["triggervalue"] 
     }; 
     options.messages["requiredif"] = options.message; 
    } 
); 

谢谢!

回答

-4

你应该检查出Foolproof Validation。它可以做你正在试图做的事情,而无需你自己推出。

+0

这看起来不错!感谢您的链接,但我仍然有同样的问题。即如何重新验证/触发客户端上的全部或部分表单验证? – andrej351 2012-07-18 23:09:52

+2

这不回答问题。 OP已经问过如何去皮和橙色,而你已经回答说你应该吃苹果。可能是一个评论。 – Liam 2015-05-18 13:07:18

13

我有一个类似的问题,我想用jquery validate和jquery ui重新验证datepicker字段。 This post帮我弄明白了。

关键是,只是为该选择器的有效方法添加一个回调。例如:

$(".requiredif").change(function() { 
    $(this).valid(); 
})