我正在项目中的多个表单上使用jQuery验证。其中一些具有特定且棘手的验证要求,因此我以通常的方式编写了验证方法来处理它们:
$.validator.addMethod('fancyValidationTest', function (value, element, arg) {
...code... });
项目中的几种形式都需要这些方法中的一些,因此我将方法定义放入包含对表单验证器调用的代码中 - $('#form_id').validate()..})
或其他什么。但这是愚蠢的 - 我最终切割并将相同的方法粘贴到我的项目中的多个位置,当我看起来应该将方法放在项目中的单个位置时,然后让验证代码根据需要访问它们
但到目前为止,没有运气。我已经尝试将方法移动到一个项目文件中,该文件加载了一堆其他经常使用的javascript代码,但这会产生并不令人惊讶的控制台错误TypeError: undefined is not an object (evaluating '$.validator.addMethod')
。顺便说一句,这是一个基于php的项目,因此包含表单和验证代码的“文件”实际上是动态构建的,而不是静态的.html文件,它们位于某个服务器上。
那么:有没有办法将所有这些方法放到一个地方并让验证码找到它们?剪切和粘贴在这里不是正确的做法;谢谢!
答案 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>