【发布时间】:2016-08-15 15:58:40
【问题描述】:
我需要向 HTML5 表单添加客户端表单验证。我不想破解我自己的解决方案,而且我没有使用 Angular。
由于我使用的是 HTML5,pattern 和 required 属性的组合涵盖了基本验证。
但是,在需要自定义验证的情况下,例如,需要勾选特定的复选框组合 - 我需要更多内容。
快速的网络搜索将我带到The 10 Best JavaScript Libraries for Form Validation and Formatting。
我测试了Validate.js 并在验证复选框时遇到了问题。 Validate.js 按名称绑定到特定的表单元素,例如
var validator = new FormValidator('example_form', [{
name: 'req',
rules: 'required'
});
对应的HTML表单:
<form name="example_form">
<input name="req" />
</form>
我决定将此应用于一组复选框并实施我自己的自定义规则 (documented on Validate.js):
<form name="example_form">
<input type="checkbox" name="test" value="a">
<input type="checkbox" name="test" value="b">
<input type="checkbox" name="test" value="c">
</form>
首先,验证器配置对象添加我的自定义规则:
var validator = new FormValidator('example_form', [{
name: 'test',
rules: 'callback_my_rule'
});
...请注意 required 规则(开箱即用)已消失,并已被我自己的规则 callback_my_rule 取代。接下来我定义了my_rule(根据文档,callback_ 前缀被删除):
validator.registerCallback('my_rule', function(value) {
var atLeastOne = ($('[name="test"]:checked').length > 0);
return atLeastOne;
});
返回值False 表示验证失败,而True 是有效的。
问题是,如果没有勾选复选框,我的自定义验证函数 my_rule 永远不会被调用。只有当我勾选复选框时才会调用该函数。仅在选中复选框时调用自定义验证函数似乎是不直观的。
Validate.js documentation 提供了一个带有复选框的示例表单,但是,示例代码中省略了复选框验证功能:
但是,示例表单确实验证了复选框,围绕Validate.js documentation 的来源进行挖掘,我看到复选框使用了开箱即用的required 规则:
问题
- 有没有人让 Validate.js 使用复选框和自定义 验证函数?
- 是否有更好的自定义表单库 验证?
【问题讨论】:
-
你的控制台有错误吗?
-
@brso05 - 没有错误。
标签: javascript html validation