【问题标题】:Loop over each failed rule with jquery.validate使用 jquery.validate 遍历每个失败的规则
【发布时间】:2012-07-19 21:15:40
【问题描述】:

在使用 jquery.validate 库验证我的表单后,我需要能够遍历当前失败的规则。

我看过以下内容:

$('form').validate().errorList

这将返回错误的消息和元素,但不返回失败规则的规则/名称。

$('form').validate().errorMap

这只是返回一个元素 ID/消息对。

$('form').validate().settings.rules

这将返回所有元素及其关联规则的列表,但没有指示当前失败的值。

我需要包含元素(或其 ID)和失败规则的东西。当然,一个元素可能会映射到多个失败的规则。

如果有一个事件我可以与不显眼的库挂钩(因为并非所有事件似乎都受到不显眼的支持)会给我失败的规则和元素,这将是理想的。

【问题讨论】:

    标签: javascript jquery validation jquery-validate unobtrusive-validation


    【解决方案1】:

    如果您正在寻找一种可以与扩展一起使用的方法,您可以执行以下操作:

    //update FormatAndAdd function to store failed rule values in data
    var oldFormatAndAdd = validator.formatAndAdd;
    
    validator.formatAndAdd = function (element, rule) {
        oldFormatAndAdd.apply(this, arguments);
        $.data(element, "failedMethod", rule.method);
    };
    
    var oldCheck = validator.check;
    
    //update check to remove failed rules from data if element is valid
    validator.check = function (element) {
        var result = oldCheck.apply(this, arguments);
        if (result) {
            $.data(element, "failedMethod", null);
        }
    };
    

    我只是将规则信息存储在数据中,但我相信您可以更新它来操作 errorList。

    【讨论】:

      【解决方案2】:

      validate() 函数初始化小部件;它不验证表单。您需要为无效表单指定处理程序,如下所示:

      $("form").validate({
          invalidHandler: function(form, validator) {
      

      完成此操作后,validator 对象的 errorList 属性中将包含一组无效元素。

      完整文档在这里:http://docs.jquery.com/Plugins/Validation/validate#options

      根据您的评论,理论上您可以修改第 585 行以将规则方法包含到错误列表中:

      this.errorList.push({
          method: rule.method,
          message: message,
          element: element
      });
      

      我已经使用基本规则对其进行了测试,但如果您有自定义函数验证器,您也应该尝试这些。

      【讨论】:

      • 我明白这一点。在上面的示例中,我指的是从$('form').validate() 返回的验证器对象。如上所述,验证器对象上的errorList 数组仅返回元素和消息,而不是规则——我需要带有元素的规则。
      • @JeradRose 更新了响应。不得不稍微修改一下源代码。
      • 谢谢@MikeRobinson。不幸的是,我无法真正修改源代码。好吧,我在技术上可以,但这是一个企业解决方案,他们不希望在更新库时出现问题,忘记我们在 jquery 库中有自定义代码。我要么需要一种从另一个文件扩展库的方法,要么找到一种内置方法。
      • 实际上,具有讽刺意味的是,我需要这个的原因是因为我已经有了一个不同的解决方案来做我需要的事情,这是通过更新 jquery 库来完成的。并且经过讨论,确定我们需要另一种方式,而无需修改 jquery 源代码。
      • rule.method 早在 2014 年就被添加到 jquery-validate 中,请参阅 pull request 1035,以便您可以在 showErrors 函数中的 errorList[0].method 中找到规则名称(例如“必需”)。
      猜你喜欢
      • 2012-10-28
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2020-05-20
      • 2022-01-10
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多