0

我有一个由 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");
   },
  });
 });

我如何解决这个问题?

提前致谢

4

3 回答 3

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

参考:

于 2013-05-09T16:48:27.860 回答
1

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

$('#myForm').off('submit');
于 2013-05-09T16:52:44.157 回答
-1

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

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

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

于 2013-05-09T17:45:21.463 回答