如何重用自定义 jQuery 验证方法?
How to reuse custom jQuery validation methods?
我正在对项目中的许多表单使用 jQuery 验证。其中一些具有特定且棘手的验证要求,因此我以通常的方式编写了验证方法来处理它们:
$.validator.addMethod('fancyValidationTest', function (value, element, arg) {
...code... });
项目中的多个表单需要其中一些方法,因此我将方法定义放入包含对表单验证程序的调用的代码块中——$('#form_id').validate()..})
或其他.但这是愚蠢的——我最终将相同的方法剪切并粘贴到我项目的多个地方,而我确实应该将这些方法放在项目的一个地方,然后让验证代码根据需要访问它们.
但到目前为止,运气不好。我已经尝试将这些方法移动到一个项目文件中,该文件加载了一堆其他常用的 javascript 代码,但这会产生不足为奇的控制台错误 TypeError: undefined is not an object (evaluating '$.validator.addMethod')
。顺便说一句,这是一个基于 php 的项目,因此包含表单和验证代码的 "files" 实际上是在运行中构建的,而不是位于服务器上的静态 .html 文件某处。
所以:有没有办法将所有这些方法放在一个地方并让验证码找到它们?剪切和粘贴在这里不是正确的做法;谢谢!
Is there a way to get all these methods into a single place and have the validation code find them?
它与任何其他 JavaScript 或客户端代码没有什么不同。无论页面的构造方式如何,您都必须在 每个页面 中包含这些外部文件,无论您希望在何处使用这些脚本。大多数人只是将它们放在通用的页眉或页脚文件中。或者,如果只在一页上需要它们,则只将它们放在一页上。
... but this produces the not unsurprising console error 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>
我正在对项目中的许多表单使用 jQuery 验证。其中一些具有特定且棘手的验证要求,因此我以通常的方式编写了验证方法来处理它们:
$.validator.addMethod('fancyValidationTest', function (value, element, arg) {
...code... });
项目中的多个表单需要其中一些方法,因此我将方法定义放入包含对表单验证程序的调用的代码块中——$('#form_id').validate()..})
或其他.但这是愚蠢的——我最终将相同的方法剪切并粘贴到我项目的多个地方,而我确实应该将这些方法放在项目的一个地方,然后让验证代码根据需要访问它们.
但到目前为止,运气不好。我已经尝试将这些方法移动到一个项目文件中,该文件加载了一堆其他常用的 javascript 代码,但这会产生不足为奇的控制台错误 TypeError: undefined is not an object (evaluating '$.validator.addMethod')
。顺便说一句,这是一个基于 php 的项目,因此包含表单和验证代码的 "files" 实际上是在运行中构建的,而不是位于服务器上的静态 .html 文件某处。
所以:有没有办法将所有这些方法放在一个地方并让验证码找到它们?剪切和粘贴在这里不是正确的做法;谢谢!
Is there a way to get all these methods into a single place and have the validation code find them?
它与任何其他 JavaScript 或客户端代码没有什么不同。无论页面的构造方式如何,您都必须在 每个页面 中包含这些外部文件,无论您希望在何处使用这些脚本。大多数人只是将它们放在通用的页眉或页脚文件中。或者,如果只在一页上需要它们,则只将它们放在一页上。
... but this produces the not unsurprising console error
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>