【问题标题】:Bootstrap Validator - validating only partially引导验证器 - 仅部分验证
【发布时间】:2015-12-14 20:45:57
【问题描述】:

又是一个关于 Bootstrap 验证器的问题。我正在使用这个插件:Validator

我有一个大的<form> 有几个组,我们将其命名为“掩码”。每个掩码由几个“字段”组成。每个字段可以是普通的<input><select> 等。每个字段都有特定的规则,例如 field_1 可以有requireddata-minLength="5",field_2 可以有maxlength="30" 等。

想要的行为:如果其中一个组/掩码本身有效,请再次启用提交按钮,以便我可以部分发送表单,不要等到表单的所有部分都填写完毕。问题:提交按钮完全禁用,直到我完成了 COMPLETE 表单中的所有验证器规则,这不是我想要的。如果整个表单中有 1 个或多个组本身有效,请激活提交按钮。

我尝试了什么:

$("#inputForm").on("change", function () {
        $("#inputForm").find("*[id^=mask_]").each(function() {
            var valid = true;
            $(this).find("input[id^=field_], select[id^=field_]").each(function() {
                if(!$(this).val()) {
                    valid = false;
                }
            });

            if(valid) {
                $("#inputForm").find(":submit").prop("disabled", false);
                $("#inputForm").prop("novalidate", false)
            }
        });
    });

如何做到这一点?我的代码确实到达了if(valid) 子句,但不会重新激活提交按钮......另外:不要自动发送它,如果一组通过在表单上调用submit() 是有效的,只有激活按钮才能让用户现在可以发送它。

谢谢!

【问题讨论】:

  • 您想要的行为与引导程序的表单验证冲突。在所有项目都经过验证之前,Bootstrap 不会让您提交表单。很好奇,为什么您希望用户能够提交部分完成的表单?如果表格真的很长,例如简历,税收等,您可以考虑将其分解为步骤(每个步骤都有自己的表单标签)并让用户执行每个步骤,通过 ajax 保存表单数据,然后才能进入下一个表单。
  • 是的,表格非常长,不,我不能把它拆开。由于数据/输入字段已经分为几组,我们认为最好让用户部分发送。在整个项目中,出于几个原因需要这样做。有没有办法让验证器验证东西并返回反馈但仍然让我使用提交按钮?...
  • 您希望引导程序来强制执行表单验证而不是强制执行表单验证。这些目标相互冲突。您可以在 if(valid) 条件中执行 ajax 请求,以便可以暂时保存用户的信息,直到他们纠正了所有错误。
  • 不,我只希望验证器通过 has-feedback 和这些错误范围向用户显示错误。此表格没有其他内容。必须有一种方法可以直观地验证并且仍然能够单击提交按钮?
  • 您希望引导程序来强制执行表单验证而不是强制执行表单验证。你不能告诉 bootstrap 需要一个表单域并且仍然能够提交表单。如果你能提供你的完整代码,也许是一个 JS fiddle 示例,你可能会得到帮助,编写一些自定义的东西来完成你想要的。

标签: javascript jquery forms validation bootstrapvalidator


【解决方案1】:

好的,经过 2 小时的搜索和尝试,这就是我最终要做的:

  1. 在选项中抛出disable,设置为false:

    $(document).ready(function () {
            $("#inputForm").validator({
                disable: false
            });
    });
    

这将保证提交按钮始终是可点击的。但是:这仍然会导致调用验证器的onSubmit() 函数,说“停止不,这还无效”。

  1. 在 min.js 中添加了以下内容以确保仅针对这种非常形式,忽略 onSubmit() 验证以使其能够发送,即使它还不是 100% 有效。

    c.prototype.onSubmit=function(a){if(c.attr("id")!="inputForm"){this.validate(),(this.isIncomplete()||this.hasErrors())&&a.preventDefault()}}
    

这将使验证器忽略表单#inputForm 上的onSubmit()

警告:不要正常使用它,因为这当然不是验证器的用途。这将 js 验证器简化为一个图形验证器,只是简单地说“嘿,这里有问题,但是好的,如果你还是想发送它,那就去做吧”。如果这样做,您必须像我们一样在服务器端捕获这些东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多