我使用以下JavaScript代码收到以下错误:
RangeError:超出最大调用堆栈大小
我假设这意味着我不小心将无限循环编码到我的JavaScript中。此代码来自使用jQuery Validate的ASP.NET MVC应用程序。此代码的目的是检查在提交之前在页面上捕获的图像。
基本上,这是需要与jQuery Validate一起发生的另一个前端验证。似乎我唯一的选择就是在提交表单时运行此代码,特别是因为" submit"之间没有其他事件发生。按钮单击和提交。这是代码:
$('form').submit(function (e) {
e.preventDefault();
//If Corporation is selected as business type
if ($('#businessStructure').val() == "Corporation") {
//Checks CEO signature present
if ($("#signImage").length == 0 || $("#signImage").attr("src") == "") {
alert("Please sign and save your signature in the CEO signature pad");
$("#ceoError").show();
}
else {
//all good, an image exists
$('form').submit();
}
}
//If Sole Proprietor is selected as business type
else if ($('#businessStructure').val() == "SoleProprietor") {
//Checks CEO signature present
if ($("#signImage").length == 0 || $("#signImage").attr("src") == "") {
alert("Please sign and save your signature in the CEO signature pad");
$("#ceoError").show();
}
//Checks partner1 signature present
if ($("#signImage1").length == 0 || $("#signImage1").attr("src") == "") {
alert("Please sign and save your signature in the first partner signature pad");
$("#partner1Error").show();
}
else {
//all good, an image exists
$('form').submit();
}
}
else {
//Checks CEO signature present
if ($("#signImage").length == 0 || $("#signImage").attr("src") == "") {
alert("Please sign and save your signature in the CEO signature pad");
$("#ceoError").show();
}
//Checks partner1 signature present
if ($("#signImage1").length == 0 || $("#signImage1").attr("src") == "") {
alert("Please sign and save your signature in the first partner signature pad");
$("#partner1Error").show();
}
//Checks partner2 signature present
if ($("#signImage2").length == 0 || $("#signImage2").attr("src") == "") {
alert("Please sign and save your signature in the second partner signature pad");
$("#partner2Error").show();
}
else {
//all good, an image exists
$('form').submit();
}
}
});
这是我第一次使用MVC应用表单提交完成并发事件。是否有一种我不知道的不同方法?
答案 0 :(得分:1)
正如其他人在评论中提到的那样,你在代码中的表单上调用了submit方法,这将使整个代码再次执行,包括你的else条件,这又会再次调用提交,从而导致无限提交事件
else {
//all good, an image exists
$('form').submit();
}
要解决此问题,您可以使用表单
中的按钮ID连接活动<form action="someUrl" method="post">
<button type="button" id="btn-save">Save</button>
</form>
,脚本将是
$("#btn-save").click(function(e){
e.preventDefault();
// your existing code
});
要获得对表单的引用,我建议使用相对选择器获取表单。在这种情况下,closest()
方法将非常方便
$("#btn-save").click(function(e){
e.preventDefault();
var $form = $(this).closest("form");
if(yourValidationCodeGoesHere)
{
}
else
{
$form.submit();
}
});