【问题标题】:JQuery Validation Form inside Bootstrap Modal won't submit after validationBootstrap Modal中的JQuery验证表单在验证后不会提交
【发布时间】:2018-10-26 19:55:10
【问题描述】:

更新: 为了正确看待这个问题,我创建了另一个Fiddle,它在模态之外显示了相同的表单。

当它满足正确的条件时,即你输入一个电子邮件地址并点击开始按钮它提交正确显示 PHP 页面,在这种情况下它显示 404 错误,但它做了应该做的事情,提交!

原始问题: 现在回到问题:我想在引导模式中提交我的表单,但是当我打开模式并输入电子邮件,然后按开始按钮时:没有发生任何事情

我做错了什么?是否缺少正确提交表单的 JavaScript 解决方案或验证错误是否干扰?

我是 JavaScript 的新手,所以如果它实际上是基于 js 的,我似乎无法弄清楚编码解决方案。

请帮我解决这个奇怪的模态问题,谢谢!

小提琴:https://jsfiddle.net/o5vpt6ck/3/

HTML:

<form id="signup-form" class="cd-signin-modal__form" action="confirm.php" method="post">
                <h3 class="bigsentence black text-center font-weight-bold">Create</h3>
                <p class="cd-signin-modal__fieldset">
                    <label class="cd-signin-modal__label cd-signin-modal__label--email cd-signin-modal__label--image-replace" for="signup-email">Enter your email address</label>
                    <input class="cd-signin-modal__input cd-signin-modal__input--full-width cd-signin-modal__input--has-padding cd-signin-modal__input--has-border signupfield" id="email" type="email" name="email" placeholder="Enter your email address">
                </p>

                <p class="cd-signin-modal__fieldset">
                    <input class="cd-signin-modal__input cd-signin-modal__input--full-width" name="submit" type="submit" value="GET STARTED">
                </p>
            </form>

JS:

$("#signup-form").validate ({

    // validation rules for registration formd
errorClass: "error-class",
validClass: "valid-class",
errorElement: 'div',
errorPlacement: function(error, element) {
    if(element.parent('.input-group').length) {
        error.insertAfter(element.parent());
    } else {
        error.insertAfter(element);
    }
},
onError : function(){
    $('.input-group.error-class').find('.help-block.form-error').each(function() {
      $(this).closest('.form-group').addClass('error-class').append($(this));
    });
},
        rules: {
    email: {email:true, required:true}
  },

    messages: {
        email: {
            required: "Please enter your email address",

        },


            highlight: function(element, errorClass) {
    $(element).removeClass(errorClass);
}    
    }

});

【问题讨论】:

  • 我正在检查您提供的代码,但它在 js 中出现了几个错误,例如无法找到 id 为“signup-username”的元素,并且您已将 id="email" 提供给多个元素。可以将 ID 赋予一页上的一个元素。所以请将其更新为正确的代码。
  • 此插件中没有名为 onError 的选项!

标签: javascript php jquery bootstrap-4 jquery-validate


【解决方案1】:

您的代码缺少两件事

将此添加到注册表单验证器中

submitHandler: function(frm) { 
    frm.submit();
}

然后在注册表单中删除

name="submit"

来自

<input class="cd-signin-modal__input cd-signin-modal__input--full-width" name="submit" value="GET STARTED" type="submit">

你可以在这里阅读解释javascript submit() is not a function?

【讨论】:

  • 惊人的反应!感谢您不仅解释了问题,还为我提供了通过另一个 Stackoverflow 问题了解更多信息的资源。你是最棒的!
  • 仅供参考 - submitHandler 选项不是必需的,因为您指定的函数与插件中已内置的默认 submitHandler 函数完全相同。换句话说,将submitHandler 排除在外,它将默认为完全相同的内容。您的问题是由name="submit" 引起的,而不是因为缺少submitHandler
  • 不,它不起作用。 submitHandler 是必需的。检查链接jqueryvalidation.org/documentation/#link-too-much-recursion
  • 你不明白你在说什么。如果您使用$(form).submit() 而不是form.submit(),则会发生过多的递归。如果您查看源代码,您会看到带有此功能的submitHandler 已内置到插件中,并且仅在您想要更改或添加到此默认行为时才使用它。声称submitHandler 是强制性选项很容易被驳斥。 See this jsFiddle that shows validation and submits when valid without having to specify submitHandler: https://jsfiddle.net/xnpo7m6v/
【解决方案2】:

你有验证逻辑,但你没有告诉它当表单真正有效时要做什么!

您需要将此添加到验证对象中:

submitHandler: function(form) {
    $(form).submit(); // You submit the actual form here
}

https://jqueryvalidation.org/validate/#submithandler

【讨论】:

  • jsfiddle.net/o5vpt6ck/5 仍然无法正常工作。你能详细说明如何使这个表单提交吗?
  • 尝试这样写而不是form.submit();,见这里jsfiddle.net/o5vpt6ck/6。提交确实发生了,在 jsfiddle 之外的代码上尝试一下
  • 那个小提琴也不起作用,我无法让它在我的代码上工作。请看这个小提琴:jsfiddle.net/okuwv57m 看看当你输入正确的电子邮件地址并按下提交按钮时,它会进入下一页吗?我想在小提琴里面这样做
  • submitHandler 的插件内置了一个默认函数,所以不,你不必指定这个!
【解决方案3】:

我认为真正的问题在其他地方。我在调试你上传的代码,发现你的JS代码有错误。

问题源于第 82 行,输入为 null,这就是您的代码在 AddClass 函数中中断的原因。

如果这能解决您的问题,请告诉我。 干杯:)

【讨论】:

  • 不幸的是,它没有:(问题在于模态本身,当我将jQuery验证代码放入任何模态时,满足验证条件后它不会提交。
  • 请不要在未发布实际代码和错误的情况下将代码或错误作为图片发布。否则,搜索引擎不会看到您的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 2012-02-25
  • 1970-01-01
相关资源
最近更新 更多