如何重用自定义jQuery验证方法?

时间:2018-06-11 15:26:52

标签: jquery jquery-validate

我正在项目中的多个表单上使用jQuery验证。其中一些具有特定且棘手的验证要求,因此我以通常的方式编写了验证方法来处理它们:

    $.validator.addMethod('fancyValidationTest', function (value, element, arg) { 
           ...code... });

项目中的几种形式都需要这些方法中的一些,因此我将方法定义放入包含对表单验证器调用的代码中 - $('#form_id').validate()..})或其他什么。但这是愚蠢的 - 我最终切割并将相同的方法粘贴到我的项目中的多个位置,当我看起来应该将方法放在项目中的单个位置时,然后让验证代码根据需要访问它们

但到目前为止,没有运气。我已经尝试将方法移动到一个项目文件中,该文件加载了一堆其他经常使用的javascript代码,但这会产生并不令人惊讶的控制台错误TypeError: undefined is not an object (evaluating '$.validator.addMethod')。顺便说一句,这是一个基于php的项目,因此包含表单和验证代码的“文件”实际上是动态构建的,而不是静态的.html文件,它们位于某个服务器上。

那么:有没有办法将所有这些方法放到一个地方并让验证码找到它们?剪切和粘贴在这里不是正确的做法;谢谢!

1 个答案:

答案 0 :(得分:1)

  

有没有办法将所有这些方法放到一个地方并让验证码找到它们?

它与任何其他JavaScript或客户端代码没有什么不同。无论如何构建页面都无关紧要,您必须在每一页中包含这些外部文件,无论您希望使用这些脚本。大多数人只是将它们放在公共页眉或页脚文件中。或者,如果仅在一个页面上需要它们,则只将它们放在一个页面上。

  

...但这会产生不令人惊讶的控制台错误TypeError: undefined is not an object (evaluating '$.validator.addMethod')

然后您只是忘记包含验证插件,或者您忘记在自定义.addMethod()方法之前将 放在 之前。

这与使用此插件的additional-methods.js文件没有什么不同,该文件恰好只包含对.addMethod()的调用列表。

包含jQuery,然后包含插件,然后包含任何其他方法。

<!--// include jQuery //-->
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>

<!--// include the validation plugin //-->
<script src="https://cdn.jsdelivr.net/npm/jquery-validation@1.17.0/dist/jquery.validate.js"></script>

<!--// optionally include the additional methods //-->
<script src="https://cdn.jsdelivr.net/npm/jquery-validation@1.17.0/dist/additional-methods.js"></script>

<!--// include YOUR additional methods //-->
<script src="path-to-your-methods-file.js"></script>

<!--// NOW you call .validate() and initialize plugin //-->
<script>
    $(document).ready(function() { // <- ensures the HTML markup is loaded first
        $('#myform').validate({    // <- initialize plugin
            // rules, options, etc.
        });
    });
</script>