我有一个由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");
},
});
});
我如何解决这个问题?
提前致谢
答案 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
,你知道它是手动调用的,不应该验证验证码,基本上是通过处理程序并允许默认行为。
参考:
.trigger()
:http://api.jquery.com/trigger/ 答案 1 :(得分:1)
如果验证提交,请尝试删除提交处理程序。
$('#myForm').off('submit');
答案 2 :(得分:-1)
在表单节点上触发事件。
$('#myForm')[0].submit()
这将导致它绕过jQuery绑定事件。