jQuery不会在preventdefault之后发布表单

时间:2013-05-09 16:42:02

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

我有一个由AJAX加载的表单,在该表单中我已经渲染了reCaptcha控件。 当我发布表单时,首先我验证,然后使用我的webservice来验证验证码。如果所有数据都是正确的,我想发布表格。

但是最后一个行为没有追加......

我读过这篇文章:

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

我的代码:

$('#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");
   },
  });
 });

我如何解决这个问题?

提前致谢

3 个答案:

答案 0 :(得分:2)

当你调用.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,你知道它是手动调用的,不应该验证验证码,基本上是通过处理程序并允许默认行为。

参考:

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

在表单节点上触发事件。

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

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