如何使用不显眼的jQuery验证手动重新验证/触发验证?

and*_*351 9 asp.net-mvc jquery jquery-validate unobtrusive-validation

我创建了自己的条件验证属性,通过继承RequiredAttribute和实现来验证客户端和服务器上的MVC模型IClientValidatable.我的想法是,如果我的模型上的布尔属性为true,则需要另一个属性.在视图中,这表示为一个复选框,用于指示是否需要填写文本框.

除了用户执行以下操作时,这非常有效:

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

我想在选中或取消选中复选框时重新验证表单,或者甚至更好地重新验证该字段,以便不再显示错误消息.我尝试过调用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;
    }
);
Run Code Online (Sandbox Code Playgroud)

谢谢!

Sco*_*erC 15

我有一个类似的问题,我想使用jquery validate和jquery ui重新验证一个datepicker字段. 这篇文章帮我搞清楚了.

关键,只是为该选择器的有效方法添加一个回调.就像是:

$(".requiredif").change(function() {
  $(this).valid();
})
Run Code Online (Sandbox Code Playgroud)


Jay*_*ris -5

您应该查看万无一失的验证。它可以完成您想要做的事情,而无需您自己动手。

  • 这并不能回答问题。OP问如何剥皮和橙子,你回答说你应该吃苹果。可能是一条评论。 (4认同)