【问题标题】:Is checkbox validation with validate.js library broken?validate.js 库的复选框验证是否损坏?
【发布时间】:2016-08-15 15:58:40
【问题描述】:

我需要向 HTML5 表单添加客户端表单验证。我不想破解我自己的解决方案,而且我没有使用 Angular。

由于我使用的是 HTML5,patternrequired 属性的组合涵盖了基本验证。

但是,在需要自定义验证的情况下,例如,需要勾选特定的复选框组合 - 我需要更多内容。

快速的网络搜索将我带到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


【解决方案1】:

我已经测试了Jquery Validation Plugin 并且使用复选框就像一个魅力!

演示链接 http://jsfiddle.net/K6Wvk/

   $(document).ready(function () {

        $('#formid').validate({ // initialize the plugin
            rules: {
                'inputname': {
                    required: true,
                    maxlength: 2
                }
            },
            messages: {
                'inputname': {
                    required: "You must check at least 1 box",
                    maxlength: "Check no more than {0} boxes"
                }
            }
        });

    });

【讨论】:

  • 这个 JQuery 插件可以满足我的需要,并且似乎得到了更好的支持(社区和文档。我切换到它,所以我接受了这个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 2017-06-07
  • 1970-01-01
  • 2022-11-02
  • 2018-03-23
  • 1970-01-01
相关资源
最近更新 更多