【问题标题】:jQuery don't post form after preventdefaultjQuery在preventdefault之后不发布表单
【发布时间】:2013-05-04 05:25:18
【问题描述】:

我有一个由 AJAX 加载的表单,在该表单内我渲染了 reCaptcha 控件。 当我发布表单时,首先我进行验证,然后使用我的网络服务来验证验证码。如果所有数据都正确,我想发布表格。

但最后一个行为不追加...

我读了这篇文章:

但是没有一个解决方案有效... :(

我的代码:

$('#myForm').submit(function (e) {
 e.preventDefault();

  var captchaInfo = {
   challengeValue: Recaptcha.get_challenge(),
   responseValue: Recaptcha.get_response(),
  };

  $.ajax({
   type: 'POST',
   url: '@Url.Action("ValidateCaptcha")',
   data: JSON.stringify(captchaInfo),
   contentType: 'application/json; charset=utf-8',
   dataType: 'json',
   success: function (msg) {
    if (msg) {
     $('#myForm').submit();
    }
    else {
     helpers.setCaptcha("captcha");
    }
   },
   error: function (req, status, error) {
    alert("error: " + error);
    helpers.setCaptcha("captcha");
   },
  });
 });

我该如何解决?

提前致谢

【问题讨论】:

    标签: javascript jquery ajax asp.net-mvc recaptcha


    【解决方案1】:

    当您调用.submit() 时,将调用相同的代码(最终可能进入无限循环)。尝试重组并将值传递给 .submit() 调用,如下所示:

    $('#myForm').submit(function (e, passThrough) {  // <-- DECLARE HERE!!
        if (passThrough) {  // <-- CHECK HERE!!
            e.preventDefault();
    
            var captchaInfo = {
                challengeValue: Recaptcha.get_challenge(),
                responseValue: Recaptcha.get_response(),
            };
    
            $.ajax({
                type: 'POST',
                url: '@Url.Action("ValidateCaptcha")',
                data: JSON.stringify(captchaInfo),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function (msg) {
                    if (msg) {
                        $('#myForm').trigger("submit", [true]);  // <-- PASS HERE!!
                    }
                    else {
                        helpers.setCaptcha("captcha");
                    }
                },
                error: function (req, status, error) {
                    alert("error: " + error);
                    helpers.setCaptcha("captcha");
                },
            });
        }
    });
    

    传递的值 (true) 在处理程序的参数中可用。所以只需检查一下。如果是true,你知道它是手动调用的,不应该验证验证码,基本上是通过处理程序并允许默认行为。

    参考:

    【讨论】:

    • 你好。我测试了这段代码,如果用户以正确的形式插入数据并且验证码正确,则发布表单。但是,如果用户错过了验证码,并且在接下来的尝试中插入正确的验证码,则表单不会发布......有些建议?谢谢!
    【解决方案2】:

    如果验证通过,请尝试删除提交处理程序。

    $('#myForm').off('submit');
    

    【讨论】:

      【解决方案3】:

      在表单节点本身上触发事件。

      $('#myForm')[0].submit()
      

      这将导致它绕过 jQuery 绑定事件。

      【讨论】:

      • 投反对票?你不明白这段代码的作用吗?如果这是您的想法,它不会导致无限循环。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多