【问题标题】:jQuery Validate require_from_group not allowing form submitjQuery Validate require_from_group 不允许表单提交
【发布时间】:2016-09-23 16:17:49
【问题描述】:

我有两个 Boostrap 表单元素正在尝试验证,至少需要 1 个:

 <div class="form-group">
    <label>Notification Email:</label>
    <input type="email" class="form-control notifGroup" id="notifEmail" name="notifEmail" />
 </div>
 <div class="form-group">
   <label for="phone">Notification Phone Number for SMS:</label>
   <input type="text" class="input-medium bfh-phone notifGroup" data-country="US" id="notifPhone" name="notifPhone" />
 </div>

我有我的脚本:

         <script src="/public/js/jquery-1.12.4.min.js"></script>
         <script src="/public/js/jquery.validate.min.js"></script>
         <script src="/public/js/additional-methods.min.js"></script> 

jQuery 验证版本 1.15.0

还有我的验证功能:

$(document).ready(function() {


$('#form').validate({

     rules: {
        notifPhone: {
            require_from_group: [1, ".notifGroup"]
        },
        notifEmail: {
            require_from_group: [1, ".notifGroup"]
        }  
    },
    messages: {


    },
     submitHandler: function(form) {


        var email = $('#notifEmail').val()
        var phone = $('#notifPhone').val()

        data = {

            phone,
            email
        }

        $.ajax({
            type: 'POST',
            url: 'http://myurl/myendpoint',
            data: data,
            success: function(res) {
                if (res == true) {                  
                    $('#error').html('<p><strong>all good.</strong></p>')
                    $('#form')[0].reset()
                    $('#submitBtn').hide()
                    setTimeout(function() {
                        $('#error').html('<p></p>')
                    }, 5000)
                }else if (res == 'over limit'){
                    $('#error').html('<p><strong>too many.</strong></p>');
                    setTimeout(function() {
                        $('#error').html('<p></p>')
                    }, 5000)                  
                }else {             
                    $('#error').html('<p><strong>already there.</strong></p>');
                    $('#form')[0].reset();
                    $('#submitBtn').hide()
                    setTimeout(function() {
                        $('#error').html('<p></p>')
                    }, 5000)


                }

            },
            error: function(err) {
                console.log(err);
            },
            timeOut: 5000

        });

        return false;
    }

});

});

在决定只需要 1 个电子邮件或电话号码之前,一切正常。在直接验证下两者都需要时,没有问题。

但是现在,当尝试只需要一个时,不会引发任何错误,并且表单只会提交空白值。如果我为一个或两个选择器而不是 .notifGroup 输入错误数据,则错误会在具有正确选择器的字段上引发(或两者都带有错误数据),但即使两个字段都已填写,表单也不会提交。

非常感谢任何帮助。

【问题讨论】:

  • 我已经注释了我的代码并将代码从 Sparky 的工作 JSFiddle 复制到我的项目中,但它仍然无法正常工作。是否存在我缺少的依赖关系,或者可能是我的 JS 脚本的命令错误?它去 jQuery-jQValidate-additionalmethods-bootstrap-myajaxfile-myformvalidation-bootstrapformhelpers?
  • @Sparky,只有当我在规则中有不正确的选择器或没有选择器时才会显示错误消息。但显然表单不会提交。
  • 您是否关注我上次关于使用插件调试选项的评论?
  • 是的,我在控制台中仍然没有错误。
  • 这太疯狂了,因为在你的小提琴奏效时,某处必须有所不同。但是对于我的生活,我无法弄清楚问题可能是什么,因为您的代码在我的项目中不起作用,并且我的所有代码都被注释了。

标签: jquery forms twitter-bootstrap jquery-validate


【解决方案1】:
  1. $().ready(function() {... 是“不推荐”as per jQuery ready handler documentation。使用$(document).ready(function() {...$(function() {...

  2. 没有理由拥有单独的.submit() 处理程序。为您的 ajax 使用插件的内置 submitHandler。您的.submit() 处理程序可能会干扰插件,而as per plugin documentationsubmitHandler 回调是“验证后通过 Ajax 提交表单的正确位置”

  3. 似乎导致您的整个问题的问题是:messages 应该是rules 的兄弟;您错误地在 messages 对象中放置了一个杂散的 },这会导致语法错误(这应该已显示在您的 JavaScript 控制台中)。

工作演示:http://jsfiddle.net/pezez5um/


编辑: 如果第 3 项只是 OP 中的一个错字,那么第 2 项可能是罪魁祸首。

【讨论】:

  • 实际上这是删除不必要的数据时出错,我现在要编辑。
  • @R.Erickson,无论如何,那么第 2 项是您问题的根本原因。您的 .submit() 处理程序正在与插件对同一事件的内置捕获竞争。
  • 感谢您的回复。错误的 } 实际上是删除我现在要编辑的不必要数据的错误。所以我应该切换验证调用和提交调用,并将 submit() 替换为 submitHandler 吗?
  • @R.Erickson,是的...请参阅我的 jsFiddle 演示中的代码。 Ajax 属于插件的submitHandler 回调函数。
  • 进行了这些更改,但表单仍会在未验证字段的情况下提交。我收到警报但没有验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多